2011-12-22 123 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

相關問題