如何在批处理文件中使用set和if语句

时间:2015-11-29 04:49:05

标签: batch-file if-statement cmd set command

所以我试图用一些套装和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”

2 个答案:

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