使用CMD Batch中的默认值

时间:2013-01-20 22:19:20

标签: batch-file cmd

有人可以帮我处理我的批次。我试图在我的批次开始时逃脱,但它不起作用。我确信它很简单,但我不是这种编程的常规用户。

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行。

3 个答案:

答案 0 :(得分:5)

您将%usr_out%的默认值设置为小写 y

set usr_out=y

然后检查变量不等是否为大写 Y

if NOT %usr_out% == Y goto myend

由于yY确实不相等,此时您的脚本会正确跳转到: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

检查变量是否没有值,或者将空字符串作为值。