If statement If语句第一次有效,但第二次无效

If statement If语句第一次有效,但第二次无效,if-statement,batch-file,dos,If Statement,Batch File,Dos,我对**如果未处理==%true%**有此问题 问题在于,它本不应该停留在循环中。 我尝试了另一种方法,如果processed==%false%,它将进入循环,但不会在第二次返回。有时,它最多会进入3次 我的“echo!processed!process”总是给我正确的数字,但IF语句只是第二次没有处理 %TRUE%和%FALSE%是全局变量1和0 setlocal :loopapp **if not '!processed!'=='%TRUE%'** (

我对**如果未处理==%true%**有此问题
问题在于,它本不应该停留在循环中。
我尝试了另一种方法,如果processed==%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
1)我看不出你在哪里定义了
TRUE
FALSE
是什么-它们肯定不是标准的批处理值

如果您试图设置用作布尔标志的变量,那么我建议您执行以下操作

要将标志设置为false,请使用
set“flag=“
”。这个“取消定义”标志

要将标志设置为true,请使用
set“flag=1
。请注意,值1没有意义。只要它不是空的,就可以使用任何值

要测试标志是否为真,请使用
if DEFINED flag ECHO flag为真

要测试该标志是否为假,请使用
如果未定义,则使用标志ECHO flag is false

我喜欢这种技术的原因是,定义是在执行时而不是解析时进行计算的。因此,在任何代码块(如FOR循环)中使用这种测试都是安全的,并且您不必担心延迟扩展

2)我没有费心去追踪你的逻辑。如果你能拿出最少的代码来演示这个问题,那就太好了

3)如果您在其他地方使用了ECHO OFF,请尝试在If之前将ECHO设置为ON,以便查看批处理脚本正在尝试执行的操作


(我原以为您可能缺少SETLOCAL EnableDelayedExpansion,但现在我看到了您的报告,
echo!processed!process
运行正常。)

子程序似乎无法运行的原因是您在其中犯了一个小错误

endlocal & set processed=%execute% & set fait=%succes%
您在%execute%和&之间有一个空格。 该空间也将位于%processed%变量的值中。 所以在你的if声明中,这是真的

'!processed!'=='%TRUE% '
要避免在%processed%变量中有该空间,请使用以下命令

endlocal & set processed=%execute%& set fait=%succes%

这也被记录在

上。问题不在于true或false…而是IF语句不起作用。尝试将0替换为0,但仍然不起作用。如果0==0也尝试过了!此外,IF语句如何第一次而不是第二次起作用…我终于使用了:ERRORCODES with not setlocal,不再将其用作子程序。它是ems就像一个调用另一个子程序的子程序一样,根本无法正常工作……无论如何,thx!