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行のときと同じです。
引数チェック処理が主目的でなければ、このようにコンパクトに書いた方が、本来の目的のコードに集中できてよい気がします。
おわりに
行数を減らす試みは奥が深そうです。
コードが読みやすい範囲で、いろいろ工夫してみたいです。
ではまた!