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