所以我试图用一些套装和ifs制作一个小批量程序,看起来很容易吗?显然,你不能像这样使用“set”和“if”。
@echo off
setlocal enabledelayedexpansion
cls
set variableTrue EQU 1
然后继续代码,稍后在程序中执行此操作。
If %variableTrue% EQU 1 goto next
请注意我也用感叹号试过了。 有了感叹号,它就像是完全忽略了这个陈述,即使它确实会像往常一样继续。随着百分号,它在崩溃之前很快说 目前预计不会有“1”。 或类似的东西,就像我说它几乎没有停留半秒钟。 只要没有冲突的变量,我一直认为你可以这样做。
:start
@echo off
setlocal enabledelayedexpansion
title test
color a
cls
:favnum
cls
echo What is your favorite number?
set /p fn=Favorite Number
If "!fn!" NEQ 13 goto thanks
If "!fn!" EQU 13 goto setvar
:setvar
set "coolestNum==1"
:thanks
cls
If "!coolestNum!"== 1 goto cool
echo Thanks
pause
goto :eof
:cool
echo cool
pause
goto :eof
这不会给出错误,它会忽略该语句并继续照常进行。
更新: 修复错误后,这仍然无效。 当我使用感叹号时,它会忽略该行,当我使用百分号时,它会说: “
“此时不期待1”
答案 0 :(得分:0)
使用
set variableTrue=1
而不是
set variableTrue EQU 1
此批处理脚本:
@echo off
setlocal enabledelayedexpansion
cls
set variableTrue=1
echo A
if %variableTrue% EQU 1 goto next
echo B
goto :EOF
:next
echo C
输出
A
C
答案 1 :(得分:0)
一组问题是您的IF陈述。例如,If "!coolestNum!"== 1 goto cool
。报价包含在比较中。
你需要是对称的 - 要么在两边都包含引号
If "!coolestNum!" == "1" goto cool
或两者都没有:
If !coolestNum! == 1 goto cool
If "!fn!" EQU 13 goto setvar
以及之前的行存在同样的问题。
您遇到的另一个问题是set "coolestNum==1"
有一个额外的,不受欢迎的=
。第二个=
成为价值的一部分。你只需要两个等号与IF比较。
以下是更正后的代码:
:start
@echo off
setlocal enabledelayedexpansion
title test
color a
cls
:favnum
cls
echo What is your favorite number?
set /p fn=Favorite Number
If "!fn!" NEQ "13" goto thanks
If "!fn!" EQU "13" goto setvar
:setvar
set "coolestNum=1"
:thanks
set coolest
cls
If "!coolestNum!"=="1" goto cool
echo Thanks
pause
goto :eof
:cool
echo cool
pause
goto :eof
但你的逻辑是不必要的错综复杂的。以下产生完全相同的结果。
:start
@echo off
setlocal enabledelayedexpansion
title test
color a
cls
echo What is your favorite number?
set /p fn=Favorite Number
if !fn! equ 13 (
set "coolestNum=1"
echo cool
) else echo Thanks
pause
exit /b