有人可以帮我处理我的批次。我试图在我的批次开始时逃脱,但它不起作用。我确信它很简单,但我不是这种编程的常规用户。
cls
@echo off
set usr_out=y
set /p usr_out=Press [N] to cancel:
if NOT %usr_out% == Y goto myend
if NOT %usr_out% == y goto myend
echo in
pause
exit
:myend
echo out
pause
编辑抱歉,我忘了详细说明上面的代码只有在我输入值时才会转到echo out
行。
答案 0 :(得分:5)
您将%usr_out%
的默认值设置为小写 y
:
set usr_out=y
然后检查变量不等是否为大写 Y
:
if NOT %usr_out% == Y goto myend
由于y
和Y
确实不相等,此时您的脚本会正确跳转到:myend
。
你需要在这里修复你的逻辑。如果你想在不满足所有给定条件的情况下跳过代码块,你必须批量使用这样的东西:
if "%usr_out%"=="y" goto continue
if "%usr_out%"=="Y" goto continue
goto myend
:continue
但是,在您的特定情况下,您可以使用更简单的方法,因为您只需要对一个字母进行不区分大小写的检查:
if /i not "%usr_out%"=="y" goto myend
另外注意:我建议使用exit
(跳转到脚本末尾)或goto :eof
(不退出批处理脚本而不是终止exit /b
而不是普通cmd.exe
{{1}})。否则,在命令提示符下手动运行脚本可能会无意中终止命令提示符窗口。
答案 1 :(得分:0)
问题在于你在“==”和其他命令之间取空格,如:
if NOT %usr_out% == Y goto myend
但你必须使用它:
if NOT %usr_out%==Y goto myend
答案 2 :(得分:0)
到你问题的后半部分:
当我没有输入值
时
您可以添加此项检查:
set /p usr_out=Press [N] to cancel:
if "x"=="x%usr_out%" set usr_out=y
检查变量是否没有值,或者将空字符串作为值。