Batch file 批次;如果;声明不起作用
我似乎对我的“如果”陈述有问题。当前,在“开始”中暂停后,文件将关闭,其他情况不会发生。很可能,我不知道自己在做什么Batch file 批次;如果;声明不起作用,batch-file,variables,if-statement,Batch File,Variables,If Statement,我似乎对我的“如果”陈述有问题。当前,在“开始”中暂停后,文件将关闭,其他情况不会发生。很可能,我不知道自己在做什么 @echo off set startnum=0 goto start :start pause set startnum="!startnum!"+1 if "%startnum%"="%0%" goto fail if "%startnum%"="%1%" goto success goto start :success cls echo It worked! echo
@echo off
set startnum=0
goto start
:start
pause
set startnum="!startnum!"+1
if "%startnum%"="%0%" goto fail
if "%startnum%"="%1%" goto success
goto start
:success
cls
echo It worked!
echo "%startnum%"
pause.
exit
:fail
cls
echo Failure
pause.
exit
第一个IF语句由
cmd.exe
预处理为
if ""!startnum!"+1"="test.bat" goto fail
这是一种完全无效的IF条件
cmd.exe
由于“=”test.bat”“
而输出语法错误消息,并退出批处理文件处理。这一点可以从下面的例子中看出
解决方案是使用正确的语法
- 为环境变量赋值
- 一个算术表达式
- 最后但并非最不重要的是IF条件本身
@echo off
set "startnum=0"
goto Begin
:Begin
set /A startnum+=1
if "%startnum%" == "0" goto Fail
if "%startnum%" == "1" goto Success
goto Begin
:Success
cls
echo It worked!
echo "%startnum%"
pause
exit /B
:Fail
cls
echo Failure
pause
exit /B
这里可以安全地删除两个IF条件下的所有双引号
还有一个提示:不要使用像START这样的命令名作为标签。它可以工作,但在向批处理文件中添加命令START并搜索命令或标签时,应该避免使用它
要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面
。。。说明如何引用批处理文件参数呼叫/?
cls/?
echo/?
退出/?
goto/?
如果/?
暂停/?
设置/?
- 第一个问题:
set startnum="!startnum!"+1
显然,您希望将1
添加到startnum
您的set
命令将startnum
设置为“!startnum!”+1
。字面上要执行算术,您需要设置/a
set /A startnum="!startnum!"+1
好吧,这不起作用,因为“!startnum!
不是数字。如果您事先调用了delayedexpansion
,那么startnum
的值将被!startnum!
替换,从而产生set/A startnum=“0”+1
,这会更有效,但仍然没有多大意义
set /A startnum=startnum+1
将1添加到startnum
-请参见提示文档中的set/?
set /A startnum+=1
也会将1添加到startnum
下一个问题
if "%startnum%"="%0%" goto fail
好吧,您似乎已经找到了lss
和所有这些组合。问题是简单的比较运算符是=
,而不是=
if "%startnum%"=="%0%" goto fail
现在-这将做什么?它将比较“StartNum的内容”和“0的内容”。由于引用了这两个参数,batch将执行字符串比较。通过字符串比较,123小于89,因为1
小于8
但是-您正在尝试进行等价比较(eq
,因为可以使用运算符而不是=
),因此前面的一点就是AAMOI
困难在于%0%
,您可能认为它试图提取变量0
的值,但实际上它将%0
替换为批处理文件的0th
参数的值,而批处理文件本身就是批处理文件名,因此您得到的是“batchfilename%”,这可能不是您真正想要的
if "%startnum%"=="0" goto fail
是实现该测试的方法。您认为
%0%
和%1%
是什么?哎呀,它们是该代码行中的变量。即使我修复了它,它仍然不起作用。谢谢。经过更多的搜索和思考,我实际上最终让它完全独立工作,但这是一个很好的答案。