Windowsコマンド虎の巻

バッチ基礎

Windowsバッチの基礎知識です。

Windowsバッチの例

test.bat

@echo off setlocal rem xに123を代入する set x=123 rem xの値を表示する echo %x% endlocal exit /b 0

(実行例)

C:¥>test.bat 123

各行の解説

  1. @echo off:各コマンドの実行結果を表示しない。バッチファイルの1行目にはほぼ必須のコマンドです。
  2. setlocal:環境変数のローカル化開始。これをやっておくとバッチ内で設定した環境変数はバッチ外に影響を及ぼしません。
  3. rem:コメント行
  4. set x=123:環境変数xに123を代入
  5. rem:コメント行
  6. echo %x%:環境変数xの値を画面に表示
  7. endlocal:環境変数のローカル化終了
  8. exit /b 0:バッチの実行を、終了コード0にて終了

endlocalは省略しても暗黙的に実行されます。

備考

  • バッチファイルの拡張子は、.batまたは .cmdを使用します。
  • 文字コードはSJIS (Shift-JIS)で作成します。
  • 上のサンプルでも記述してある @echo offsetlocalは、基本的にバッチファイルお決まりの記述です。

バッチに引数を渡す

実行するバッチファイルに引数を渡したい場合は、
バッチ名の後ろに半角スペース区切りで引数1 引数2 ...という感じで渡せます。

バッチ内で引数の値を取得するには、%1、%2 ... という感じで取得できます。

%0でバッチファイル名を取得できます。

%*で引数に指定されて全ての値を取得できます。

例)引数に渡した値を表示する

(test.bat)

@echo off echo %0 echo %1 echo %2 echo %3 echo %* pause

実行例

C:¥>test.bat orange apple banana test.bat orange apple banana orange apple banana 続行するには何かキーを押してください . . .

引数は最大9つまで指定できます。(%1~%9)

「@」アットマーク

バッチプログラム内において、コマンドの先頭に「@」を付けると実行するコマンドが非表示になります。

例)@なしの場合

(sample01.bat)

echo foo echo bar pause

実行例

C:¥>echo foo foo C:¥>echo bar bar C:¥>pause 続行するには何かキーを押してください . . .

@なしだと、実行したコマンドが表示されます。

例)@ありの場合

(sample02.bat)

@echo foo @echo bar @pause

実行例

foo bar 続行するには何かキーを押してください . . .

@なしだと、実行したコマンドが表示されません。


しかし、すべてのコマンドの先頭に@を付けるのは面倒です。

このような場合は、バッチファイルの先頭に「@echo off」と記載すれば、すべてのコマンドの先頭に@を付けたことになります。

例)バッチファイルの1行目に@echo off を記載した場合

(sample03.bat)

@echo off echo foo echo bar pause

実行例

foo bar 続行するには何かキーを押してください . . .

実行コマンドはすべて表示されません。

実行中のバッチがあるフォルダを取得する(%~dp0)

バッチプログラム内でバッチがあるフォルダを取得するには「%~dp0」を使用します。

例)実行中バッチがあるフォルダを表示して移動する

(test.bat)

@echo off echo %~dp0 cd /d %~dp0 pause

「%~dp0」はバッチプログラムの中で使用できます。