1
0

More than 3 years have passed since last update.

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

Posted at

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行のときと同じです。
引数チェック処理が主目的でなければ、このようにコンパクトに書いた方が、本来の目的のコードに集中できてよい気がします。

おわりに

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

ではまた!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0