我遇到此问题 **如果未处理==%true%** 。
问题是当它不应该停留在循环中
我尝试了IF处理的其他方式==%false%它进入循环但是不会在第二次返回。有时候,最多可进行3次。
我的“echo!processed!process”总是给我正确的号码,但IF语句只是第二次没有处理
%TRUE%AND%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
答案 0 :(得分:5)
1)我没有看到您定义TRUE
和FALSE
的位置 - 它们肯定不是标准批量值。
如果您尝试设置充当布尔标志的变量,那么我建议如下。
要将标记设置为false,请使用SET "FLAG="
。这个“取消定义”旗帜。
要将标志设置为true,请使用SET "FLAG=1
。请注意,值1没有意义。只要它不是空的,你就可以使用任何值。
要测试标志是否为true,请使用IF DEFINED FLAG ECHO FLAG IS TRUE
要测试标志是否为假,请使用IF NOT DEFINED FLAG ECHO FLAG IS FALSE
我喜欢这种技术的原因是DEFINED在执行时评估,而不是在解析时评估。因此,在任何代码块中使用此测试是安全的,例如在FOR循环中,并且您不必担心延迟扩展。
2)我没有费心去追踪你的逻辑。如果您能够提供最少量的代码来证明问题,那将是一件好事。
3)如果您在其他地方使用了ECHO OFF,请尝试在IF之前设置ECHO ON,以便您可以看到批处理脚本尝试执行的操作。
(我想也许您错过了SETLOCAL EnableDelayedExpansion,但现在我看到echo !processed! process
的报告正常工作。)
答案 1 :(得分:1)
您的子程序似乎不起作用的原因是因为您在其中犯了一点错误。
endlocal & set processed=%execute% & set fait=%succes%
%execute%和&之间有空格。 该空间也将在%processed%变量的值中。 所以在你的if语句中这将是真的
'!processed!'=='%TRUE% '
要避免在%processed%变量中占用此空间,请使用此
endlocal & set processed=%execute%& set fait=%succes%
这也记录在SS64
上