Spa*_*lls -1 if-statement dos batch-file
我有这个问题**IF未处理==%true%**.
问题是当它不应该停留在循环中.
我尝试了IF处理的其他方式==%false%它进入循环但是不会在第二次返回.有时候,最多可进行3次.
我的"echo!processed!process"总是给我正确的数字,但IF语句只是第二次没有处理
%TRUE%和%FALSE%是全局变量1和0
setlocal
:loopapp
**if not '!processed!'=='%TRUE%'** (
set /a count+=1
"%ProgramFiles%\abc\abc.exe" !file! !post!
call :ERRORCODES !file! !post! !ERRORLEVEL! !count!
goto :loopapp
)
endlocal
:ERRORCODES
setlocal
if %errornum% LEQ 99 (
set no_license=%FALSE%
if '!post!'== 'A' set no_license=%TRUE%
if '!no_license!'=='%TRUE%' (
echo Searching ... '!count!' ... Please Wait ...
if !count! EQU 5 (
set execute=%TRUE%
set succes=%FALSE%
echo %~n1 - Fatal - process %TIME% >> %tempfolder%\errorlog.txt
goto :END
)
set execute=%FALSE%
set succes=%FALSE%
goto :out_errorcodes
)
set execute=%TRUE%
set succes=%FALSE%
echo %~n1 - Fatal - process %TIME% >> %tempfolder%\errorlog.txt
goto :out_errorcodes
)
... other errors
:out_errorcodes
endlocal & set processed=%execute% & set fait=%succes%
goto :EOF
Run Code Online (Sandbox Code Playgroud)
1)我没有看到你在哪里定义什么TRUE和FALSE- 它们肯定不是标准批量值.
如果您尝试设置充当布尔标志的变量,那么我建议如下.
要将标志设置为false,请使用SET "FLAG=".这个"取消定义"旗帜.
要将标志设置为true,请使用SET "FLAG=1.请注意,值1没有意义.只要它不为空,您可以使用任何值.
要测试标志是否为true,请使用 IF DEFINED FLAG ECHO FLAG IS TRUE
要测试标志是否为false,请使用 IF NOT DEFINED FLAG ECHO FLAG IS FALSE
我喜欢这种技术的原因是DEFINED是在执行时评估的,而不是在解析时.因此,在任何代码块中使用此测试是安全的,例如在FOR循环中,并且您不必担心延迟扩展.
2)我没有费心去追寻你的逻辑.如果您能够提供最少量的代码来证明问题,那将是一件好事.
3)如果您在其他地方使用了ECHO OFF,请尝试在IF之前设置ECHO ON,以便您可以看到批处理脚本尝试执行的操作.
(我想也许你错过了SETLOCAL EnableDelayedExpansion,但现在我看到你的报告echo !processed! process有效了.)