バッチファイルに引数が無ければ終了する


Y子です。
引数が必須のバッチファイルには、「引数が無い場合の処理」が欠かせません。
今回は、「引数がなければ終了する」という処理を考えます。

概要・用途

引数の有無を確認し、無い場合は終了します。
引数が必須の処理の冒頭に記述することで、エラーを防ぎます。
なるべく短く書きます。
確認環境:Windows 10 Home (Bld. 19042.867)

コード

(1) シンプルな例

これまでの記事でも使っている書き方です。

argument_check1.bat
@echo off
rem 引数がない場合は終了する
if "%~1"=="" (
  echo 引数がありません
  pause
  exit /b
)

rem 引数があった場合の処理
echo 引数:%~1

第1引数が空文字と一致すれば、引数無しと判定しています。
その際、第1引数は「$1」(ダブルクオート付きの場合がある)ではなく、「%~1」(ダブルクオートがあれば削除)を使います。
引数があれば、その引数を出力することにします。

引数が無い場合・ある場合の動作確認をしてみます。

実行結果
> argument_check1.bat
引数がありません
続行するには何かキーを押してください . . .

> argument_check1.bat aaa
引数:aaa

(2) コンパクト版

(1)は「シンプルな例」と言いながら5行も使っているので、行数を節約した書き方も考えてみます。

argument_check2.bat
@echo off
rem 引数がない場合は終了する
if "%~1"=="" (echo 引数がありません & pause & exit /b)

rem 引数があった場合の処理
echo 引数:%~1

複数のコマンドを「&」でつないで、1行で書けてしまいました。

実行結果
> argument_check2.bat
引数がありません
続行するには何かキーを押してください . . .

> argument_check1.bat bbb
引数:bbb

もちろん、実行結果は5行のときと同じです。
引数チェック処理が主目的でなければ、このようにコンパクトに書いた方が、本来の目的のコードに集中できてよい気がします。

おわりに

行数を減らす試みは奥が深そうです。
コードが読みやすい範囲で、いろいろ工夫してみたいです。

ではまた!