如果声明第一次工作,但不是第二次

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)

dbe*_*ham 5

1)我没有看到你在哪里定义什么TRUEFALSE- 它们肯定不是标准批量值.

如果您尝试设置充当布尔标志的变量,那么我建议如下.

要将标志设置为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有效了.)