DOSコマンド

バッチファイルの制御用コマンド

コマンド説明
@現在行の画面への表示抑止
:(ラベル)ラベル
%0〜%9パラメータの参照
%環境変数名%環境変数の参照
%%文字バッチ・プログラム内の変数
( )一連のコマンドをグループ化
&&前のコマンドが成功した場合だけ実行
||前のコマンドが失敗した場合だけ実行
&1行中の複数のコマンドの区切り
^エスケープ文字。
……@,&,%,^などを「文字そのもの」として使用したい場合に直前につける
; (セミコロン)パラメータの区切り
, (カンマ)パラメータの区切り
CALL他のバッチ・プログラムの呼び出し
CALL :SUB同一バッチファイル内サブルーチン呼び出し
ECHO画面へのメッセージ表示
ENDLOCAL環境変数のローカライズを終了する
FOR..IN(..)DO繰り返し
GOTO分岐
IF条件比較
ELSE条件が偽である場合の処理の指定
PAUSE処理の停止
REMコメント
SETLOCAL環境変数のローカライズ
SHIFT参照パラメータの繰り上げ


パラメータ参照方法の拡張

パラメータ説明
%~1引用句 (") があればそれを削除する
%~f1完全修飾パス名を得る
%~d1ドライブ文字を得る
%~p1パス名だけを得る
%~n1ファイル名だけを得る
%~x1拡張子だけを得る
%~s1短い名前を得る
%~a1ファイルの属性を得る
%~t1ファイルのタイムスタンプを得る
%~z1ファイルサイズを得る


Windowsサービス登録・削除

C:>sc create myservice binPath= "C:\xxxxxx\myservice.exe"

C:>sc delete myservice


nslookupを使用してDNSサーバの設定の状態を調べる

 《構文》

nslookup -type=xxxx ドメイン名 DNSサーバ

 《使用例》

## ネームサーバを調べる
nslookup -type=ns example.com

## MXレコードを調べる
nslookup -type=mx example.com

## CNAMEレコードを調べる
nslookup -type=cname example.com

## TXTレコードを調べる
nslookup -type=txt example.com

for文を使用してファイルやディレクトリの一覧を取得する

## ファイル一覧の取得
@for /R %i in (*) do @echo %~fi

## ディレクトリ一覧の取得
@for /D /R %i in (*) do @echo %~fi

キーボードからの値入力を受け付ける

input.cmd

@echo off
echo 値を入力して下さい
set /p var=
echo 入力値は%var%です

開いているポートを調べる

netstat -an

サーバのポートが開いているか調べる

netsh diag connect iphost IPアドレス ポート番号

簡単な文字列の置換

simple_replace.bat

@echo off

set before="Hello World!"
set after=%before:World=Test%

echo %before%
echo %after%

正規表現を使用した文字列の置換

for の "usebackq" と powershell を利用して正規表現での文字列置換を行う

test_replace.bat

@echo off

set target="C:\Program Files\R\R-3.5.3\bin\Rscript.exe"

set version=
for /F "usebackq delims=," %%i in (`powershell -Command "& { $txt = $Args -join ''; $txt -replace '.+[^0-9]([0-9]+\.[0-9]+\.[0-9]+)[^0-9].+','$1'} %target% "`) do set version=%%i

echo %target%
echo %version%

遅延環境変数を使用した置換(変数の値を別の変数の値で置換する)

set var1=ABC
set varBF=A
set varAF=a

setlocal ENABLEDELAYEDEXPANSION
echo !var1:%varBF%=%varAF%!
endlocal

代替Linuxコマンド

行数を数える(wc -l)

for /F "usebackq" %a in (`type ファイル名 ^| find /C /V ""`) do echo %a

実行中プロセスの表示(ps)

tasklist

コマンドの実行結果を変数にセットする

REM 変数nowdateに日付をセットする
for /F "usebackq" %t in (`echo %date:/=%`) do set nowdate=%t

コマンドの実行結果を変数にセットする(フィルタ使用)

REM 変数cntに実行中の notepad.exe の数をセットする
for /F "usebackq" %t in (`tasklist /NH /FI "IMAGENAME eq notepad.exe" ^| find /C /V ""`) do set cnt=%t

grep

findstr "検索文字列" ファイル名

cat

type ファイル名

tail

@echo off
set filename=%1%
set cnt=%2%
if "%cnt%" == "" set cnt=10

REM 行数のカウント
set linecnt=0
for /F "tokens=*" %%a in (%filename%) do set /A linecnt+=1
 
REM 行の表示
set /A startline=%linecnt% - %cnt%
set linecnt=0
for /F "tokens=*" %%a in (%filename%) do call :disp_rec %%a
goto :eof
 
:disp_rec
set /A linecnt+=1
if %linecnt% GTR %startline% echo %*%
goto :eof

:eof

tail -f

@echo off
set file=%1%

set start_line=0
set pre_cnt=0
set pre_start_line=0

set linecnt=0
for /F "tokens=*" %%a in (%file%) do set /A linecnt+=1
set /A pre_cnt=%linecnt%-10

:main
set linecnt=0
for /F "tokens=*" %%a in (%file%) do set /A linecnt+=1
if "%linecnt%" GTR "%pre_cnt%" set /A start_line=%pre_cnt%
if "%pre_start_line%" EQU "%start_line%" sleep 1 & goto :main

set cnt=0
for /F "tokens=*" %%a in (%file%) do call :disp_line %%a
set pre_start_line=%start_line%
set pre_cnt=%linecnt%

sleep 1
goto :main

:disp_line
set /A cnt+=1
if %cnt% GTR %start_line% echo %*%
goto :eof

:eof

tee

@echo off
set file=%1%
del %file%
for /f "tokens=* delims=" %%i in ('@findstr /R .*') do @echo.%%i && @echo.%%i>>%file%

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-10-01 (木) 00:51:33 (5321d)