我向用户提供了几个选项,然后等待他们的输入。在我的测试中,当我点击[Enter]键并进行任何选择时,程序将崩溃并刻录。它给出了错误“(此时意外。”如何检测用户是否只按[Enter]键?
这就是我所拥有的。
:pickClient
set clientNum=
cls
echo.
echo Pick a Client
echo.
echo.
echo 1. Client 1
echo.
echo 2. Client 2
echo.
echo.
echo [E] - EXIT
echo.
set /p clientNum=Input selection.
if %clientNum%==1 (
set client=client1Name
) else if %clientNum%==2 (
set client=client2Name
) else if /i %clientNum%==E (
GOTO goAway
) else if %clientNum%==" " (
GOTO pickClient
) else (
GOTO pickClient
)
答案 0 :(得分:2)
如果您只按Enter键,则变量为空且您的比较
if %clientNum%==1 (
成为
if ==1 (
这是非法的。为了防止这样的问题或变量值中的空格,谨慎的做法是始终用引号括起if
中的变量和值:
if "%clientNum%"=="1" (
然后变成
if ""=="1" (
这是一个有效的陈述。
答案 1 :(得分:1)
我明白了!这就是我的所作所为。
set clientNum=
cls
echo.
echo Pick a Client
echo.
echo.
echo 1. Client 1
echo.
echo 2. Client 2
echo.
echo.
echo [E] - EXIT
echo.
set /p clientNum=Input selection.
IF NOT DEFINED clientNum GOTO pickClient <---I added this line of code. *****
if %clientNum%==1 (
set client=client1Name
) else if %clientNum%==2 (
set client=client2Name
) else if /i %clientNum%==E (
GOTO goAway
) else if %clientNum%==" " (
GOTO pickClient
) else (
GOTO pickClient
)
更新:
感谢@ss的有用输入,我发现在测试变量时我应该开始使用引号。通过我自己的测试,我发现以下工作与测试DEFINED一样有效。
set clientNum=
cls
echo.
echo Pick a Client
echo.
echo.
echo 1. Client 1
echo.
echo 2. Client 2
echo.
echo.
echo [E] - EXIT
echo.
set /p clientNum=Input selection.
if "%clientNum%"=="1" (
set client=client1Name
) else if "%clientNum%"=="2" (
set client=client2Name
) else if /i "%clientNum%"=="E" (
GOTO goAway
) else if "%clientNum%"==" " (
GOTO pickClient
) else if "%clientNum%"=="" (
GOTO pickClient
) else (
GOTO pickClient
)
注意引号。通过对他的投入进行投票来给予一些爱。我非常感谢它。