バッチのメモ
バッチの書き方
引数
コマンドの引数に指定した値を使う時は%を使う。
hoge.bat 引数1 引数2
echo %1 echo %2
変数
変数を設定する時はSETコマンドを使う。
SET VAR
変数を参照する時は%で囲む。
echo %VAR%
変数に数値を代入する時は /a オプションをつける
SET /a VAR=12345
変数に文字列を代入するときはダブルクォーテーションで囲む必要はない。
SET VAR=hoge
変数スコープ
変数をローカル化するにはsetlocalとendlocalで囲む。
囲んだスコープ内だけで変数が有効になる。
@echo off setlocal SET VAR=hoge echo %VAR% endlocal echo %VAR%
一回目のechoでだけ変数VARが有効になっている。
遅延環境変数
遅延環境変数を設定するにはsetlocalのあとにenabledelayedexpansionをつけます。
@echo off setlocal enabledelayedexpansion rem コマンドを書く endlocal
遅延環境変数とは
変数を読み込むタイミングを遅らせる変数。
これまで変数を%で囲んでいたが、%だとその変数を見つけた瞬間すべてを展開するので、以下のような場合に悲しいことが起きてしまう。
@echo off setlocal enabledelayedexpansion SET COUNT=0 for %%i in (*.html)do( SET /a COUNT=%COUNT% + 1 ) echo %COUNT% endlocal
結果
0
for文の中でCOUNTに+1したのに、COUNTが0のまま展開されてしまうから、結果は0になる。
そうなってしまうのを防ぐために、setlocalのあとにenabledelayedexpansionをつけて、変数は%ではなくて!で囲む。
遅延環境変数についてQiitaの記事
http://qiita.com/sawa_tsuka/items/c7c477cacf8c97792e17
@echo off setlocal enabledelayedexpansion SET COUNT=0 for %%i in (*.html)do( SET /a COUNT=!COUNT! + 1 ) echo !COUNT! endlocal
結果(htmlファイルが4つある場合)
4
遅延環境変数にすることで期待通りの結果になる。
if文
if文の中の処理は()で囲む。
SET VAR=1 if VAR == 1 ( echo %VAR% )
for文
for文は以下のように書く。
SET VAR=hoge for %%i in (ループの条件) do( echo %VAR% )
ループ条件を以下のように書くと、カレントディレクトリにあるhtmlファイルを対象にループを回すことができる。
SET VAR=hoge for %%i in (*.html) do( echo %VAR% )
コメント
コメントを書く時はremコマンドを使う。
rem コメントを書く