INDEX
Windows Command Prompt バッチ処理
Windows DOS バッチ処理
バッチ処理とは、一定期間(もしくは一定量)データを集め、まとめて一括処理を行なう処理方式。または、複数の手順からなる処理において、あらかじめ一連の手順を登録しておき、自動的に連続処理を行なう処理方式である。
Windowsでも、UNIXのシェルコマンドほど多様な処理は、難しいが基本的な処理(繰り返し、条件分岐、処理のジャンプ、他処理の実行など)は行うことができる。さらに、Windows 2000 以降のNT系OSの CMD.COM は、機能が拡張され多様なことが実行できるようになった。
※注:ここで紹介するバッチ処理は、一部で Windows 2000 以降のNT系OSのコマンドプロンプトのみ有効なコマンド(処理)を使用している。また、DOSバッチ自体過去の遺産になってきています。可能ならば Windows Script Host (WSH) や Windows PowerShell (PS) で行う方が、制御や機能が豊富になります。
ただ、VBScript については、廃止が決定されている。2023年10月で非推奨、2024年後半でオンデマンド機能で提供(デフォルトで有効)、2027年にオンデマンド機能がデフォルトで無効。廃止(削除)の時期は未定。
個別ページ
- WinBat/DateTime
- バッチで日時の取得と日付計算処理
- WinBat/Modifier
- バッチパラメータ修飾子によるファイル情報の取得
- WinBat/runas
- 管理者権限チェック、昇格して実行する
- WinBat/Multiple
- バッチで多重起動チェック
- Script/Mixed
- 1ファイルに複数のスクリプトを記載(ほとんど、バッチファイル+何か)
tips
バッチ処理でいろいろと→ WinBat/Tips
バッチでOSを判定する方法(XPまで)→ WinBat/OsCheck
一定時間停止(スリープ)する→ WinBat/sleep
文字色と背景色を変えて文字列を表示する→ WinBat/ColoredEcho
echo コマンドによる、メッセージ出力・画面制御など→ WinBat/Echo
コマンドプロンプトとバッチファイル
ウインドウタイトル変更
コマンドプロンプト の ウインドウタイトルを変更する。
TITLE [新しいタイトル]
ビープ音
ベル
echo コマンドで、ベル文字(0x07, ^G )を出力し、「システムエラー」のサウンドを鳴らす。
コマンドプロンプトで、「echo ^G」と入力。※「^G」は Ctrl + G キー
バッチファイルでも、「echo ^G」。※「^G」も同様に制御文字のベル文字
メッセージビープ
rundll32 で、「メッセージビープ」のサウンドを鳴らす。
rundll32 user32.dll,MessageBeep
コマンドプロンプトでSJIS以外を表示する
chcp コマンドを使用することで、コマンドプロンプトの文字コードを変更できる。
引数に変更するページコードを指定する。デフォルトは、Shift_JIS の 932。他には、EUC が 20932、JIS が 50220、UTF-7 が 65000、UTF-8 が 65001 などがある。引数がなければ現在のコードページが表示される。
ちなみに、単純にコードページを変更しただけではフォントが日本語対象外となるため、マルチバイトを表示すると文字化けする。プロパティからフォントを"MS ゴシック"に変更すれば、ユニコードに対応するので表示されるらしい(自分ところはうまくいかない)。
同一バッチファイル内でのサブルーチン呼び出し
昔は複数のバッチファイルやGOTO文を駆使してやっていた内容を、単一のバッチファイルの中に、まとめることができるようになった。(高級言語で言うサブルーチンのを呼び出して処理を行うような感覚で行うことができる)
: CALL :SubRoutine [パラメータ] : GOTO :EOF :SubRoutine rem ECHO %1 %2 %3 %4 %5 ...... : GOTO :EOF
"GOTO :EOF"はバッチファイルの終端へのジャンプ。または、"EXIT /B" でバッチ処理(サブルーチン呼び出し)を抜ける。
局所的な環境変数の利用
バッチ処理内やある範囲内のみで環境変数を使用したり、再設定する場合は、SETLOCAL 及び ENDLOCAL コマンドを利用する。SETLOCALを実行後設定した環境変数の内容は、ENDLOCALを実行時に破棄され、以前の状態に戻される。
SETLOCALにオプションを指定することにより、'コマンド拡張機能'と'遅延環境変数の展開'の有効/無効を指定できる。指定したオプションは、ENDLOCAL実行まで有効になる。
SETLOCAL ENABLEEXTENSIONS … コマンド拡張機能の有効を指定 DISABLEEXTENSIONS … コマンド拡張機能の無効を指定 ENABLEDELAYEDEXPANSION … 遅延環境変数の展開の有効を指定 DISABLEDELAYEDEXPANSION … 遅延環境変数の展開の無効を指定
遅延環境変数の展開
環境変数は実行時に展開される。よって、IF文やFOR文の処理内で、環境変数を設定し、それを利用して処理等を行っても、評価される内容は、実行前の内容のままである。これを実行毎に正しく展開されるようにするには、cmd.comのオプションに /V:ON を付ける必要がある。
:
REM 遅延環境変数の展開が有効チェック
SET VAR=BEFORE
IF "%VAR%" == "BEFORE" (
SET VAR=AFTER
IF "!VAR!" == "AFTER" GOTO DELAY_OK
)
GOTO DELAY_NG
:DELAY_OK
:
REM リストの結合
SET LIST=
FOR /F %%f IN (DBTB_LIST.TXT) do set LIST=!LIST!,%%f
SET LIST=%LIST:~1%
:
GOTO :EOF
REM エラー処理
:DELAY_NG
ECHO 遅延環境変数の展開が有効になっていません。
ECHO 「CMD.EXE /V:ON /C %0」として起動してください。
GOTO :EOF
:
もしくは、SETLOCAL ENABLEDELAYEDEXPANSION で遅延環境変数の展開を有効にし、バッチ終了時に、ENDLOCAL でSETLOCALの設定を無効にする。
REM 遅延環境変数の展開を有効に SETLOCAL ENABLEDELAYEDEXPANSION : REM リストの結合 SET LIST= FOR /F %%f IN (DBTB_LIST.TXT) do set LIST=!LIST!,%%f SET LIST=%LIST:~1% : ENDLOCAL
バッチ処理の終了コード
通常バッチ処理を実行しただけでは、エラーレベルは返さない。バッチ処理をコールした側でエラーレベルを取るためには、"EXET /B 終了コード"を行う。 "/B"を忘れると、コマンドプロンプト自体を終了してしまう。
> typt test1.bat @ECHO OFF CALL test2.bat ECHO TEST2 ErrorLevel = %ERRORLEVEL% > typt test2.bat @ECHO OFF EXIT /B 3 > test1 TEST2 ErrorLevel = 3
リダイレクト、パイプ、コマンドの連結
- command > filename
- 標準出力のリダイレクト (commandの出力をfilenameに上書保存)
- command >> filename
- 標準出力のリダイレクト (commandの出力をfilenameに追記保存)
- command 2> filename
- 標準エラー出力のリダイレクト (commandのエラー出力をfilenameに上書保存)
- command 2>> filename
- 標準エラー出力のリダイレクト (commandのエラー出力をfilenameに追記保存)
- command 2>&1
- 標準エラー出力を標準出力と同じにする
- command > filename 2>&1
- 標準エラー出力を標準出力と同じファイルにリダイレクト (commandの出力をfilenameに上書保存)
- command >> filename 2>&1
- 標準エラー出力を標準出力と同じファイルにリダイレクト (commandの出力をfilenameに追記保存)
- command < filename
- 標準入力のリダイレクト (filenameの内容をcommandの入力にする)
- command1 | command2
- パイプ (command1の標準出力をcommand2の標準入力にする)
- command1 & command2
- command1を実行後、command2を実行する
- command1 && command2
- command1が成功した場合に、command2を実行する
- command1 || command2
- command1が失敗した場合に、command2を実行する
※標準エラーを標準出力と同じにする場合は、記述する順番に注意すること。
ファイル記述子 (ファイルディスクリプタ / file descriptor)
| FD | 意味 | デフォルト |
|---|---|---|
| 0 | 標準入力(stdin) | キーボード |
| 1 | 標準出力(stdout) | ディスプレイ |
| 2 | エラー出力(stderr) | ディスプレイ |
「2>&1」は、 FD:2 (stderr) を、FD:1 (stdout) に接続する(その時の接続先)。そのため、「command 2>&1 > filename」とした場合、エラー出力は標準出力に、(コマンドからの)標準出力は、ファイルに出力となる。
システムディバイス
MS-DOS から存在するディバイスファイル。予約ファイル(デバイス)で、ファイル名等には使用できない。
- CON
- コンソール (キーボード または ディスプレイ)
- NUL
- ヌルディバイス
- PRN
- プリンタ装置
- AUX
- 補助入出力装置 (RS-232C等)
- CLOCK$
- クロック
- COM1〜COM9
- シリアル通信ポート
- LPT1〜LPT9
- パラレル通信ポート
システム デバイス状態・設定
mode コマンドで接続されているディバイスの確認や設定が行える。
コンソール(CON)の表示行数や桁数、シリアルポート(COMx)のボーレートやパリティ有無・データ長などが設定できる。
ECHO出力
echo コマンドによる、メッセージ出力・画面制御など。詳細は WinBat/Echo
改行の出力
ECHOコマンドだけだと「ECHO は <ON> です。」と出力される。以下のようにしてECHOコマンドを実行します。ECHOの後に空白を入れないことが重要です。
ECHO. ECHO: ECHO\ ECHO/
パーセント記号の出力
バッチの中で %1 や %path% は引数や環境変数の内容に置き換えられてしまいます。パーセント記号そのものを表示したい場合は、記号を2つ重ねて出力する。
ECHO OFF ECHO %%1 の内容は %1 です。 ECHO ECHO %%PATH%% の実行結果は... ECHO %PATH%
特殊記号"<>|&^"表示する方法
これらの特殊記号は"<>|&^" の前に "^"をつけて記述します。
ECHO ^< → < ECHO ^> → > ECHO ^| → | ECHO ^& → & ECHO ^^ → ^
ECHO ^<^^_^^^> → <^_^>
参考文献・リンク
- @IT Windows2000 コマンドライン徹底活用
- バッチもん研究所
最終更新時間:2026年06月01日 15時56分36秒 指摘や意見などあればSandBoxのBBSへ。