我的“if”语句似乎有问题。目前在“开始”暂停后,文件刚刚关闭,没有其他任何事情发生。机会是,我不知道我在做什么。
@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
答案 0 :(得分:1)
第一个问题:
set startnum="!startnum!"+1
显然,您希望将1
添加到startnum
。
您的set
命令会将startnum
设置为"!startnum!"+1
。从字面上看。要执行算术运算,您需要set /a
。
set /A startnum="!startnum!"+1
嗯,这不起作用,因为"!startnum!
不是数字。如果您事先调用delayedexpansion
,则startnum
的值将替换为!startnum!
,而set /A startnum="0"+1
会产生更多,但仍然没有多大意义。{/ p>
set /A startnum=startnum+1
向startnum
添加1 - 请参阅文档提示中的set /?
。
set /A startnum+=1
还会为startnum
添加1。
下一个问题。
if "%startnum%"="%0%" goto fail
好吧,你似乎找到了lss
和所有帮派。问题是简单的比较运算符是==
,而不是=
。
if "%startnum%"=="%0%" goto fail
现在 - 那会怎么做?它将“ thecontentsofstartnum ”与“ thecontentsof0 ”。由于引用了这些参数的两个,批处理将执行字符串比较。通过字符串比较, 123 89 ,因为 1
小于{{1 }}
但是 - 你正在尝试等价比较(8
,因为可以使用运算符而不是equ
)所以前面的点只是AAMOI。
难度为==
您可能认为尝试提取变量%0%
的值,但实际上它将0
替换为%0
参数的值batchfile,这是批处理文件名本身,所以你得到“ batchfilename %” - 可能不是你真正想要的。
0th
是实施该测试的方法。
答案 1 :(得分:0)
第一个 IF 语句由cmd.exe
预处理
if ""!startnum!"+1"="test.bat" goto fail
这是完全无效的 IF 条件。
由于cmd.exe
, "="test.bat""
输出语法错误消息并退出批处理文件处理。这可以通过debugging the batch file看到。
解决方案是使用
的正确语法修复了批处理文件代码:
@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 并搜索命令或标签,就应该避免这种情况。
要了解使用的命令及其工作原理,请打开命令提示符窗口,执行以下命令,并完全阅读为每个命令显示的所有帮助页面。
call /?
...解释了如何引用批处理文件参数。cls /?
echo /?
exit /?
goto /?
if /?
pause /?
set /?
进一步阅读以下问题的答案: