DT日記

家を離れた自宅警備員の日記

バッチファイルのifで空文字を比較する

Windows のバッチファイルで対話環境()的なものが作りたいときの Tips 。

要は、キーボード入力を要求して if で振り分けるときに空文字列を入れられたらどうすんのよおい、の話。こんな感じになりました。

a, b, c, i, x おまけに q の入力を受け付けて、不正なら戻ってやり直す、みたいな。てきとー。 set /p MODE=">" はキー入力を受けて環境変数 MODE に代入するコマンドですね。

:SELECT_SETUP
echo.
echo a. 機能 A
echo b. 機能 B
echo c. 機能 C
echo i.  hogehogeの情報
echo x. セットアップを終了する
echo.
set /p MODE=">"

if ""%MODE%""=="""" goto SELECT_SETUP
if %MODE:~0,1%==a goto SETUP_A
if %MODE:~0,1%==A goto SETUP_A
if %MODE:~0,1%==b goto SETUP_B
if %MODE:~0,1%==B goto SETUP_B
if %MODE:~0,1%==c goto SETUP_C
if %MODE:~0,1%==C goto SETUP_C
if %MODE:~0,1%==i goto SETUP_I
if %MODE:~0,1%==I goto SETUP_I
if %MODE:~0,1%==x goto QUIT
if %MODE:~0,1%==X goto QUIT
if %MODE:~0,1%==q goto QUIT
if %MODE:~0,1%==Q goto QUIT

goto SELECT_SETUP

%MODE:~0,1%環境変数 MODE の最初の一文字を取り出す。

if ""%MODE%""=="""" で空文字列を弾く。

if %MODE%=="" などと書くと、空文字列にマッチしない揚句、その次の (比較に "" を付けない) if でエラーが吐かれる。

空文字列の件は バッチファイルでのif文分岐 - Windows系OS - 教えて!goo の回答を参照した。

回避方法は、ファイル名をダブルクォーテーションで囲います。

if ""%1""=="""" goto error

("%1"と""をそれぞれダブルクォーテーションで囲います)

これでOK。

バッチファイルでのif文分岐 - Windows系OS - 教えて!goo