2011-12-22 5 views
-1

でこの問題が発生しています**処理されていない場合==%true%**
問題は、ループしてはいけないときに問題が残っていることです。
処理されたIFの周りで試してみました==%false%ループに入っていますが、2回目に戻りません。時々、それは3回まで入る。最初に文が実行されますが、2回目ではありません

私の「エコー!処理さ!プロセスは、」いつも私に右の番号を与えているが、IF文がちょうど二度目を処理していない周りの

% TRUE%と%FALSE%であるグローバル変数1と0

あなたは TRUEFALSEが何であるかを定義する場所
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

に文書化されている%、処理%変数を使用してこの

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

をその空間を有する避けるために

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

trueになります:setlocalを持たないERRORCODESを使用しましたが、サブプログラムとしては使用していません。それは、サブプログラムが別のサブプログラムを呼び出すサブプログラムのようにうまく動作しないようです...とにかくthx! – Spaceballs

答えて

5

1)私は見ていない - 彼らは確かに標準バッチ値ではありません。

ブール値フラグとして機能する変数を設定しようとしている場合は、次のことをお勧めします。

フラグをfalseに設定するには、SET "FLAG="を使用します。これは、フラグを "定義解除"します。

フラグをtrueに設定するには、SET "FLAG=1を使用します。値1には意味がないことに注意してください。空でない限り、任意の値を使用できます。

フラグはフラグが、私はこのテクニックを好きな理由は、定義されたが、実行時に評価されていることである、時間を解析できませんIF NOT DEFINED FLAG ECHO FLAG IS FALSE

偽の使用であるかどうかをテストするにはIF DEFINED FLAG ECHO FLAG IS TRUE

真の使用であるかどうかをテストします。したがって、FORループのようなコードブロック内でこのテストを使用することは安全です。遅延展開について心配する必要はありません。

2)私はあなたのロジックをトレースしようとしなかった。問題を示す最小限のコードを思いつくことができればよいでしょう。あなたが他の場所でOFF ECHOを使用している場合は、バッチスクリプトが何しようとしているものを見ることができるように

3)、IFへのECHO ONは直前に設定してみてください。

(私はあなたがSETLOCAL EnableDelayedExpansionを欠落していたかもしれないと思ったが、今私はecho !processed! process作品というレポートを参照してください。)

+0

問題はtrueまたはfalseではありません。そのIF文は機能しません。代わりに0を入れようとしましたが、まだ動作しません。 0 == 0でも試しました!また、IF文が初めてではなく、2回目ではなく... – Spaceballs

1

あなたはそれに少しの誤差を作ったので、あなたのサブプログラムは動作していないような理由があります。

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

%実行%と&の間にスペースがあります。 そのスペースも%processed%変数の値になります。 は、だからあなたのif文では、これは私が最終的にしました。これはまたSS64