你的代码是自己写的?结构上面有些乱
开始不用给SHUT赋值的,而且在goto后面连接的home是不要加:标号的
你用我这套测试一下吧,输入的只要不是Y或N就提示重新输入,N直接退出批处理
测试之后还有问题你再补充,我会每天至少看一次
@echo off
:home
cls
set /p shut=请确定是否关机(Y/N):
if /I "%shut%"=="y" shutdown -s -f -t 00&&goto end
if /I "%shut%"=="n" (goto :eof) else (echo 输入有误,请按任意键重新输入!&&pause>nul&&goto home)
:end
echo 操作完成&&pause>nul&&goto :eof
ps:测试是否能关机时,你最好在shutdown前加一个echo,看一下有没有回显就好了,测试成功后再删掉echo。
如果你不希望关机时有提示,就把end标号和内容全删了,shut=y中的&&goto end也删了,更清爽
楼主的问题解决了,下面是我修改后的代码,能识别空格和无输入,请楼主注意:在复制下面的代码的时候一定要将每一行后面的空格去掉,否则运行出错
@echo off
:home
set shut=
set /p shut=请确定是否关机(Y/N):
if "%shut%"=="" (
echo 没有任何输入,请按任意键重新输入
goto home)
if "%shut%"==" " (
echo 输入的空格,不合要求,请按任意键重新输入
goto home)
if /I %shut% equ y shutdown -s -f -t 00
if /I %shut%==n goto :home
echo.
echo 输入有误,请按任意键重新输入!
echo.
pause>nul
goto :home
你的问题就出在第四行
set shut=""
你这里已经把它给初始化成""了,也就是两个引号
那你在下面如果不输入的话,这个值就一直是两个引号,你可以在判断之前加一句
echo %shut%
就可以知道它那里的结果是不是你输入的结果了。
你把
set shut=""
改成
set shut=
就可以了。
@echo off
:home
cls
set shut=""
set /p shut=请确定是否关机(Y/N):
IF NOT "%shut%"=="" (
if %shut% NEQ "" SET shut=%shut:~0,1%
) else (
set shut="")
if /i %shut%==y goto y
if /i %shut%==n goto n
echo 选择无效,请重新输入
echo.
goto :home
:y
if /I %shut%==y shutdown -s -f -t 00
pause>hul
goto :home
:n
echo.
echo 输入有误,请按任意键重新输入!
echo.
pause>nul
goto :home
重新给你一个, 则试通过
我晕,都不用那么复杂好吗,批处理中,如果只是要输入一个空格,那就可以用两个上引号,中间弄一个空格就可以了,这样就代表空格了
比如:修改注册表中的键值时,有的键值是有空格的,例如我修改注册表中的PaintDesktopVersion键值
REG ADD HKEY_CURRENT_USER\Control" "Panel\Desktop /V PaintDesktopVersion /T REG_DWORD /D 1 /F
上面这个修改注册表中,比如控制面板是CONTROL PANEL这之间有个空格,就可以用上面的方式空格开,你试试你的也用这种方式,就可以解决了