トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

WinBat/FrontPage

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/Modifier
    • バッチパラメータ修飾子によるファイル情報の取得
  • WinBat/runas
    • 管理者権限チェック、昇格して実行する
  • 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 ^<^^_^^^> → <^_^>

参考文献・リンク

最終更新時間:2026年06月01日 15時56分36秒 指摘や意見などあればSandBoxのBBSへ。