How to Write a Batch File
コメント
rem [コメント]
rem ここがコメントになり、解釈や実行はされない
文字を出力する
echo [[on | off] | [メッセージ]]
コマンドプロンプトが表示された時点で、"echo on"になっている。
普通、処理内容を表示しないので、標準的に1行目に"@echo off"を記述する。
"@"は、コマンドを画面表示させずに実行するためのバッチファイル制御記号。
バッチファイルの先頭に"echo off"を記述しても、実際に反映されるのは2行目以降になるため、"echo off"を実行した文字列だけが表示されてかっこ悪いから"@"をつける。
test.bat>>
@echo off
echo Message // Messageが表示される
echo. // 空白行が表示
echo] // 空白行が表示
echo on // echo文そのものも表示
echo Message // Messageが表示される
$ test.bat
Message // echo Message
// echo.
// echo]
// echo on
$echo Message // echo Message
echo Message // echo Messageの結果
バッチファイルのコマンドライン引数
xxx.bat [引数]
引数は%1~として順に取得できる。
xxx.bat>>
@echo off
echo %1
echo %2
echo %3
$ xxx.bat aaa bbb ccc
aaa
bbb
ccc
環境変数の設定
set [環境変数名]=[値]
set SourceDrive = "D:"
set TargetDrive = %1
※定義した環境変数はコマンドプロンプト終了時に揮発する。
この他に、値を設定するだけではなく、演算や置換、変数中の文字列の取り出しなどもできる。
環境変数の参照
%[環境変数名]%
set SourceDrive = "D:"
echo %SourceDrive% // "D:"が表示される
参考:既存の環境変数は以下の方法で。
(Windows 7)
マイコンピュータ>右クック:プロパティ>システムの詳細設定>システムのプロパティ:詳細設定タブ>環境変数
コントロールパネル>ユーザーアカウントと家族のための安全設定>ユーザーアカウント>環境変数の変更
条件分岐
if [not] exist ファイル名(コマンド1) [else コマンド2]
if [not][/i] "文字列1" == "文字列2" (コマンド1) [else コマンド2]
if [/i] "文字列1" 比較演算子 "文字列2" (コマンド1) [else コマンド2]
if defined 変数 (コマンド1) [else コマンド2]
if [not] errorlevel 番号 (コマンド1) [else コマンド2]
if cmdextversion 番号 (コマンド1) [else コマンド2]
上から順に、
- ファイルが存在するか
- 文字列同士の比較
- 高度な比較
- 環境変数が定義されているか
- errorlevelで他プログラムの終了コードを条件として分岐
- コマンドインタプリタのバージョンを条件として分岐
他のオプションは、
exist ファイルが存在する場合に条件が真になる
not 指定した判定条件を反転させる。
/i 文字列を比較する場合に、大小文字を区別しない
比較演算子{ EQU 等しい, NEQ 等しくない, LSS より小さい, LEQ 以下, GTR より大きい, GEQ 以上 }
switchはない。環境変数とGOTO文で似たのを作ることは可能。
set case=[n]
goto CASE_%case%
:CASE_1
処理
goto :CASE_END
:CASE_2
処理
goto :CASE_END
:CASE_END
繰り返し処理
まとめ切れてないので省略
バッチファイルからバッチファイルを呼び出す
call [ドライブ名:][パス]ファイル名 [引数]
callで呼び出すと、呼び出したbatファイルの処理終了後、制御が戻ってくる。
入力待ち
pause
「続行するには何かキーを押してください…」と表示され処理が中断される。
続行するには任意のキー、処理を中止するにはCTRL+C。
ユーザーによる入力
(2000/XP~)キー入力された文字列を環境変数として取り込むことができる。
set /p [環境変数] = "[メッセージ]"
@echo off
set /p Input = "入力してくれい"
echo %Input%と入力された
これを利用して分岐処理などを行う。
@echo off
echo DISK0にパーティションを作成します。既存のデータは消去されます。
set /p ANSWER="よろしいですか(y/n)"
if "%ANSWER%"=="y" diskpart /s x:\makedisk.ans
exit
Original Ref:
炎のコマンドプロンプト入門
http://www.geocities.co.jp/SiliconValley-SanJose/1227/index.html
コマンドプロンプトを使ってみよう!
http://ykr414.com/dos/index.html
バッチメモ(Hishidama's bat-file Memo)
http://www.ne.jp/asahi/hishidama/home/tech/windows/bat.html