2011-12-22 84 views
-1

我遇到了这个问题** IF NOT processed ==%true%**
问题是,它应该停留在循环中。
我试过绕过IF处理的其他途径==%false%它在循环中进行,但不能在第二次回去。有时候,它会达到3次。如果声明第一次有效,但不是第二次

我的“呼应!处理!进程”总是给我正确的号码,但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 
+0

我终于已经使用:没有setlocal的ERRORCODES,不再将其用作子程序。看起来像一个子程序调用另一个子程序一点也不工作......无论如何! – Spaceballs 2011-12-23 14:23:29

回答

5

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

如果您尝试设置作为布尔标志的变量,那么我推荐以下内容。

要将标志设置为false,请使用SET "FLAG="。这个“未定义”标志。

要将标志设置为true,请使用SET "FLAG=1。请注意,值1没有意义。只要不是空的,您可以使用任何值。

要测试标志为true使用IF DEFINED FLAG ECHO FLAG IS TRUE

要测试标志是假的使用IF NOT DEFINED FLAG ECHO FLAG IS FALSE

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

2)我没有打算试图追查你的逻辑。如果你能拿出一小部分证明问题的代码,那就太好了。

3)如果你已经使用ECHO OFF其他地方,可以尝试设置ECHO ON前的那次如果是这样,你可以看到批处理脚本试图做的事。

(我想也许你失踪SETLOCAL EnableDelayedExpansion,但现在我明白你报告echo !processed! process作品。)

+0

问题不在于真假,它的IF语句不起作用。试图把0,而不是工作。如果0 == 0也试过!另外,IF语句如何首次运行而不是第二次运行... – Spaceballs 2011-12-22 21:55:35

1

您的子程序似乎不工作的原因是因为你在里面做了一个小错误。

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

%execute%和&之间有一个空格。 该空间也将位于%processed%变量的值中。 所以在你的if语句,这将是真正的

'!processed!'=='%TRUE% ' 

为了避免在处理%%变量使用该空间这个

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

这也记录在SS64

相关问题