概要

このページは、Windowsのバッチファイルについて記述します。

echo [[on | off] | テキスト]

echo [on | off]

バッチファイルでのコマンドの表示のon/offを設定します。
on/offを指定しない場合は現在のon/offの状態を表示します。
なお、echo off自体は表示されてしますので通常は@echo offの様に@を前置します。

echo テキスト

テキストを表示します。表示後は改行されます。改行したくない場合は以下の様に記述します。
echo.

rem テキスト

テキストを注釈扱いにします。

if

for

変数

goto :ラベル

指定ラベルに分岐します。
ラベルは、行頭に:(コロン)を前置して以下の様に記述します。
:ラベル
:eofはあらかじめ定義されているラベルでこのラベルに分岐するとバッチファイを終了します。

shift

コマンドライン引数をシフトさせます。
バッチファイの各引数に割り当てられている変数は%1~%9の9個です。10個以上の引数を扱う場合に使用します。
shiftを1回実行すると以下の様に引数の順番が移動します。
バッチファイルの呼び出しは以下の通りとします。
d:¥>bat¥shl.bat A B C D E F G H I J K
%0~%9には以下の順番で代入されます。
"d:¥bat¥shl.bat" A B C D E F G H I
shiftを実行すると1個ずつ順番がずれます。
%0~%9には以下の順番で代入されます。
A B C D E F G H I J

call

他のバッチファイルを呼び出したり自身のバッチファイルの中のラベルを呼び出せます。
呼び出された側でexit /b エラーレベル を実行するとcall文の次の行に制御が移ります。
call :ラベル [引数 ・・・ 引数]
call バッチファイル名  [引数 ・・・ 引数]

exit [/b] [終了コード]

バッチファイルを終了させます。
/bオプションを指定しないとcall文で呼び出されたバッチファイルでもexitを実行した時点で呼び出し側のバッチファイルも含めて終了してしまいます。

pushd フォルダー

現在のカレンドライブ・カレントフォルダーをディレクトリスタックに保存し指定されたフォルダーをカレントフォルダーにします。ドライブ名を指定したフォルダーによって変更します。ネットワーク上のフォルダーを指定した場合は、新たにローカルドライブを作成し、フォルダーをマウントします。
popdによりディレクトリスタックに保存したフォルダーに戻すことができます。

popd

pushdによりディレクトリスタックに保存されたフォルダーを取り出しそのフォルダーをカレントフォルダーにします。

pause

バッチファイルを一時停止し、続行するには何かキーを押してください...のメッセージを表示してキー入力を待ちます。

定義済みの環境変数

PATH

実行コマンドでパス名が省略された場合に参照するフォルダの一覧

CD

カレントディレクトリ

DATE

現在の日付が以下の様な書式で格納される
2016/01/14

TIME

現在の時刻が以下の書式で格納される
21:29:56.53

RANDOM

0~32767の整数の乱数が格納される

OS

OSが格納される。Windows 7の場合以下の文字が格納されている Windows_NT

USERNAME

ログオンしているユーザー

HOMEDRIVE

ユーザーのホームドライブが格納されている

HOMEPATH

ユーザーのホームドライブおよびフォルダーが格納される

TEMP

一時的な作業用のフォルダーが格納される

TMP

TEMPと同じ内容が格納される

フォルダー名の処理例

バッチファイルのフォルダー名を1階層ごとに分解して一番下の階層のパス名を取得する例である。
d:¥bat¥mod¥parsepass.bat
@echo off

set src=%~dp0

setlocal ENABLEDELAYEDEXPANSION

set PATHLF=!src:¥=^

!
for /F %%A in ("!PATHLF!") do (
        set cDIR=%%A
        echo !cDIR!
)

endlocal && set cDIR=%cDIR%

echo 最下位のパス %cDIR%
取得したバッチファイルのフォルダー名を環境変数srcに代入します。
変数の遅延展開を有効にするためにsetlocal ENABLEDELAYEDEXPANSIONを実行します。
環境変数に含まれるフォルダー区切りである\を改行に置き換えます。
d:¥bat¥modがパス名の場合¥が改行に置き換わりますので以下の3行の文字列に置き換わります。
D:
bat
mod
最下位のパス mod
for文によりパスの1階層ごとに変数%%Aにパス名を格納します。
上記のバッチファイルのパス(d:¥bat¥mod)の場合、D: bat modの順でパス名が格納されます。
パス名は変数cDIRに代入します。
最後に代入されたパス名が一番下の階層のパス名になります。
ここではmodが一番下の階層のパス名です。

サンプルのダウンロード

ダウンロード bat.zip(5.22kByte)
ZIPファイルに含まれるファイル
bat
├─for_f
│      1.bat
│      2.bat
│      3.bat
│      4.bat
│      5.bat
│      src1.txt
│      src2.txt
│      table.txt
│      
├─for_files
│  │  1.bat
│  │  2.bat
│  │  3.bat
│  │  4.bat
│  │  
│  ├─tess
│  ├─test1
│  └─test2
├─for_l
│      1.bat
│      
├─if
│      cmp.bat
│      env.bat
│      err.bat
│      exist1.bat
│      exist2.bat
│      
├─mod
│      parsepass.bat
│      
└─var
        test.bat