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
|
キーボードからの値入力を受け付ける †
|
@echo off
echo 値を入力して下さい
set /p var=
echo 入力値は%var%です
|
開いているポートを調べる †
サーバのポートが開いているか調べる †
|
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%