コマンドプロンプト (cmd) 覚え書き
- 2009.04.06 Monday
- dev
バッチファイル (.bat) は、定型作業を自動化するのに便利なので、それなりに利用します。
ディレクトリ内のファイルに対して個々にある操作を行ないたい
dir
の /b
オプションを利用して、テンポラリファイルにファイル一覧を書き出し、for
ループで回します。
例えば、develop ディレクトリ内のファイル・ディレクトリに対して svn cleanup / update を実行するバッチファイルは以下の通り。
dir /b develop > _tmp_file.txt for /f %%L in (.\_tmp_file.txt) do ( svn cleanup develop/%%L svn update develop/%%L ) del _tmp_file.txt
遅延環境変数の展開
コマンドプロンプトを利用する際、
cmd /v:on
を実行すると、「遅延環境変数の展開 (delayed environment variable expansion)」を有効にすることができます。
「遅延環境変数の展開」を有効にしておくと、バッチファイル内で環境変数をローカル変数のように扱うことができます。
環境変数をバッチファイル内に局所化するコマンドとして
setlocal
がありますが、その引数に enabledelayedexpansion
を指定すると、バッチファイル内で「遅延環境変数の展開」を有効にすることができます。
なお、遅延評価された環境変数は以下のコードのように !VARIABLE!
と「%」の代わりに「!」を使います。
setlocal enabledelayedexpansion for /f %%L in (en ja fr) do ( set RSRC_DIR=resource\%%L\ svn update !RSRC_DIR! ) endlocal
バッチファイル内での入力受付
set
の /P
オプションを利用すると、バッチファイルでユーザーに処理を尋ねるプロンプト表示を利用することができます。
例えば、引数が指定されていない場合にオプションを尋ねたい場合には
if "%1"=="" ( set /P USERINPUT=option? if not '%USERINPUT%'=='' set USERINPUT=%USERINPUT:~0,3% ) else ( set USERINPUT=%1 ) if '%USERINPUT%'=='' goto usage
のようにします。
if not '%USERINPUT%'=='' set USERINPUT=%USERINPUT:~0,3%
がややトリッキーですが、これは入力された内容の最初の 4 文字だけを利用するためのおまじないです。
set
の /P
オプションはファイルからのリダイレクトも利用できます。
例えば、file の内容を %FILEINPUT%
にセットする場合、
set /P FILEINPUT<=file
のようなコードになります。
スポンサーリンク