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


Y子です。
昨日に引き続き、引数チェックシリーズです。

概要・用途

引数の有無を確認し、無い場合は対話式で入力を求めます。
確認環境:Windows 10 Home (Bld. 19042.867)

コード

(1) シンプルな例

バッチファイルに引数を与えれば、引数を使います。
引数が無ければ、対話式で標準入力からの入力を求め、同じ変数に格納します。

argument_interactive1.bat
@echo off
rem 変数初期化
set str_arg=

rem 引数がない場合は対話モードで取得
if "%~1"=="" (
  set /P str_arg="引数は? : "
) else (
  set str_arg=%~1
)

echo 引数:%str_arg%
pause

まず、引数「aaa」を与えて実行した場合。

実行結果:引数あり
> argument_interactive1.bat aaa
引数:aaa
続行するには何かキーを押してください . . .

次に、引数無しで実行し、聞かれてから「aaa」を入力した場合。

実行結果:対話式で入力
> argument_interactive1.bat
引数は? : aaa
引数:aaa
続行するには何かキーを押してください . . .

ただ、聞かれたときにEnterを押してしまうと、結局は変数に空文字が渡ってしまうので、エラー処理としては不十分です。

実行結果:対話式でも空欄
> argument_interactive1.bat
引数は? : 
引数:
続行するには何かキーを押してください . . .

(2) 入力させるまで絶対にあきらめない例

そこで、入力があるまで無限に入力を求めるよう、修正してみました。

argument_interactive2.bat
@echo off
rem 変数初期化
set str_arg=

:label_top

rem 引数がない場合は対話モードで取得
if "%~1"=="" (
  set /P str_arg="引数は? : "
) else (
  set str_arg=%~1
)

if "%str_arg%"=="" (
  echo 引数は絶対に必要です
  goto :label_top
) else (
  echo 引数:%str_arg%
)
pause

引数なし、標準入力も絶対に入れない、という人はこうなります。

実行結果:対話式で絶対にあきらめない
> argument_interactive2.bat
引数は? :
引数は絶対に必要です
引数は? :
引数は絶対に必要です
引数は? :
引数は絶対に必要です
引数は? :
引数は絶対に必要です
引数は? :
引数は絶対に必要です
引数は? :
引数は絶対に必要です
引数は? :
引数は絶対に必要です
引数は? : bbb
引数:bbb
続行するには何かキーを押してください . . .

おわりに

エラー処理だいじ。

では!