Windowsバッチファイル

バッチファイルの引数の受け取り方【%1〜%9・%*・shiftの使い方完全ガイド】

Windowsバッチファイル
記事内に広告が含まれています。

バッチファイルに外部から値を渡す「引数」の使い方を解説します。%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つずつずらして可変個の引数を処理できる
  • 引数の存在チェックを先に行うのが安全なバッチの基本
  • 次の記事ではサブルーチンと関数を学ぶ

コメント

タイトルとURLをコピーしました