set /p num=”1~3の中から選択 (1/2/3)”
などとして入力した数字に応じて実行を分岐したいが
もし数字ではなくただenterキーを押すとどうなるか?
%num%の中身が空になるのでそのまま実行されるのかと思いきや
空文字の場合はその変数自体が無くなることを意味するので
set /p num="1~3の中から選択 (1/2/3)"
if %num% == 1 (
set destDir="%dest1%"
) else if %num% == 2 (
set destDir="%dest2%"
) else if %num% == 3 (
set destDir="%dest3%"
) else (
goto syoriend
)
goto files
:files
echo %num%が入力されました。
:syoriend
Pause
ENDLOCAL
Exit /b 0
これを実行し1~3を押さずただenterを押すとバッチが不正な処理として強制終了してしまう(:syoriendのpauseまで到達せず)
numという変数自体が無いのだからその下の条件式も if == 1 とか if == 2 として認識されてしまうのだ
じゃあどうするかというとnumの中身が空かどうか確認する条件式として以下を追加する
if %num%_v == _v
これだとnumが空の場合は _v == _v となるので等号が成立する
但し追加する場所は工夫する必要がある
set /p num="1~3の中から選択 (1/2/3)"
if %num% == 1 (
set destDir="%dest1%"
) else if %num% == 2 (
set destDir="%dest2%"
) else if %num% == 3 (
set destDir="%dest3%"
) else if %num%_v == _v (
goto syoriend
)
goto files
これはNGで最初の if %num% == 1 の部分で先程言った通り強制終了する
正しくは
set /p num="1~3の中から選択 (1/2/3)"
if %num%_v == _v ( goto syoriend )
if %num% == 1 (
set destDir="%dest1%"
) else if %num% == 2 (
set destDir="%dest2%"
) else if %num% == 3 (
set destDir="%dest3%"
) else (
goto syoriend
)
goto files
set /p コマンドのすぐ後に if %num%_v == _v で確認を行うと強制終了せずにバッチが完走する






コメントを残す