バッチファイルに外部から値を渡す「引数」の使い方を解説します。%1〜%9・%*・shiftを使いこなすと汎用性の高いバッチが作れます。
引数の基本
@echo off
:: 実行例: backup.bat C:\data D:\backup
set SRC=%1
set DST=%2
echo コピー元: %SRC%
echo コピー先: %DST%
if "%SRC%"=="" (
echo 使い方: %~nx0 コピー元 コピー先
exit /b 1
)引数の特殊変数一覧
| 変数 | 意味 |
|---|---|
| %0 | バッチファイル自身のパス |
| %1〜%9 | 第1〜9引数 |
| %* | 全引数をまとめて参照 |
| %~n0 | バッチファイル名(拡張子なし) |
| %~nx0 | バッチファイル名(拡張子あり) |
| %~dp0 | バッチファイルのフォルダパス(末尾付き) |
| %~f1 | 第1引数のフルパス |
shiftで引数をずらす
@echo off
:loop
if "%1"=="" goto end
echo 処理中: %1
shift
goto loop
:end
echo 全ファイルの処理が完了しました
pause引数チェックのベストプラクティス
@echo off
setlocal
if "%~2"=="" (
echo.
echo 使い方: %~nx0 [コピー元] [コピー先]
echo 例: %~nx0 C:\data D:\backup
echo.
pause
exit /b 1
)
set SRC=%~f1
set DST=%~f2
if not exist "%SRC%" (
echo エラー: コピー元が存在しません: %SRC%
exit /b 1
)
robocopy "%SRC%" "%DST%" /e
pauseまとめ
- %1〜%9で引数を受け取り、%*で全引数を参照できる
- %~nx0でバッチファイル名、%~dp0でバッチの場所を取得できる
- shiftで引数を1つずつずらして可変個の引数を処理できる
- 引数の存在チェックを先に行うのが安全なバッチの基本
- 次の記事ではサブルーチンと関数を学ぶ


コメント