检测bat文件中的[Enter]键

时间:2014-10-01 20:53:54

标签: batch-file batch-processing

我向用户提供了几个选项,然后等待他们的输入。在我的测试中,当我点击[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

)

2 个答案:

答案 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

)

注意引号。通过对他的投入进行投票来给予一些爱。我非常感谢它。