SimpleBoxes

コマンドプロンプト (cmd) 覚え書き

バッチファイル (.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

のようなコードになります。

スポンサーリンク

<< Serene Bach 管理画面の構成 :: リノベーションは楽じゃない 総集編 - 子供部屋 >>