局所変数を使用する
- setlocalとendlocalの間でsetした変数は局所変数となる。
- 入れ子も可能である。
@echo off
set a=1
echo %a%
setlocal
set a=2
echo %a%
setlocal
set a=3
echo %a%
endlocal
echo %a%
endlocal
echo %a%
起動ファイル名と起動引数
- 起動ファイル名は「%0」に格納されている。
- 起動引数は「%1」「%2」…に格納されている。
- 「%*」にはすべての起動引数が格納されている。
@echo off
echo %0
echo %1
echo %2
echo %*
エラー出力のみファイルへ書き出す
echo 処理開始 >> log.txt
dir 存在しないファイル 2>> log.txt
echo 処理終了 >> log.txt
標準出力とエラー出力の切り捨て
- 標準出力を切り捨てる場合は「>nul」とする。
- エラー出力も切り捨てる場合は「>nul 2>&1」とする。
@echo off
echo ===== test1 =====
dir 存在しないファイル
echo ===== test2 =====
dir 存在しないファイル >nul
echo ===== test3 =====
dir 存在しないファイル >nul 2>&1
ERRORLEVEL
- ERRORLEVELを使用したif文は指定したERRORLEVEL以上であればtrueとなる。
@echo off
dir | find AIUEO
if ERRORLEVEL 1 echo %ERRORLEVEL%
if文のブロック化
- if文の実行文は括弧で括ることによりブロック化できる。
@echo off
dir >nul 2>&1
if ERRORLEVEL 1 (
echo 1
echo 2
) else (
echo 3
echo 4
)
dir 存在しないファイル >nul 2>&1
if ERRORLEVEL 1 (
echo 5
echo 6
) else (
echo 7
echo 8
)
文字列の加工
- %[変数名]:[置換前の文字]=[置換後の文字]%
- %[変数名]:~[開始位置],[文字数]%
@echo off
setlocal
set tmp=%TIME%
set tmp=%tmp: =0%
set tmp=%tmp::=%
set tmp=%tmp:.=%
set tmp=%DATE:/=%%tmp%
echo %tmp%
endlocal
曜日の取得
- VBScriptで曜日を取得する。ファイル名を「wday.vbs」とする。
WScript.Quit(WeekDay(Date))
@echo off
setlocal
CSCRIPT /B wday.vbs
SET WDAY=%ERRORLEVEL%
echo %WDAY%
endlocal