2011-12-22 3 views
-1

**이 문제는 ** 처리되지 않은 경우 == % true % **입니다.
문제는 그것이 shouldnt 할 때 루프에 머무르고 있다는 것입니다.
IF 처리 된 주위에 다른 방법을 시도 == % false % 루프에 있지만 두 번째 시간에 돌아 가지 않습니다. 때때로, 그것은 3 번까지 들어간다.문이 처음으로 작동하지만 두 번째 시간이 아님

내 "에코! 처리! 과정은"항상 나에게 올바른 번호를주고 있지만, 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

에 설명되어 % 처리 % 변수를 사용하는 공간을 피하기 위해 사실 일 것이다 : setlocal이없는 ​​ERRORCODES를 더 이상 서브 프로그램으로 사용하지 않았습니다. 어쨌든 다른 서브 프로그램을 호출하는 서브 프로그램이 잘 작동하지 않는 것처럼 보입니다. – Spaceballs

답변

5

1) 나는 보지 않는다 - 그들은 확실히 표준 배치 값이 아니다.

부울 플래그로 작동하는 변수를 설정하려면 다음을 권장합니다.

플래그를 거짓으로 설정하려면 SET "FLAG="을 사용하십시오. 이것은 플래그를 "정의 해제"합니다.

플래그를 true로 설정하려면 SET "FLAG=1을 사용하십시오. 값 1에는 아무런 의미가 없습니다. 비어 있지 않은 한 모든 값을 사용할 수 있습니다. 플래그는 플래그가 false 사용을하는 경우 테스트하기 위해 실제 사용 IF DEFINED FLAG ECHO FLAG IS TRUE

경우

는 테스트하려면 IF NOT DEFINED FLAG ECHO FLAG IS FALSE

나는이 기술을 좋아하는 이유는 실행 시간에 평가되는 정의 된 시간을 구문 분석 할 것입니다. 따라서 FOR 루프와 같은 코드 블록 내에서이 테스트를 사용하는 것이 안전하며 지연된 확장에 대해 걱정할 필요가 없습니다.

2) 나는 당신의 논리를 추적하려고 노력하지 않았습니다. 문제를 나타내는 코드를 최소한으로 만들 수 있다면 좋을 것입니다.

3) 다른 곳에서 ECHO를 사용하지 않았다면 배치 스크립트가 수행하려고하는 것을 볼 수 있도록 IF 바로 전에 ECHO를 설정하십시오.

은 (난 당신이 SETLOCAL EnableDelayedExpansion 누락 된 아마 생각했지만, 지금은 보고서가 echo !processed! process 작품을 참조하십시오.) 당신이 그것에 약간의 실수를하기 때문에

+0

이 문제는 true 또는 false와는 관련이 없습니다. IF 문이 작동하지 않습니다. 대신에 0을 넣으려고했지만 여전히 나던 한 작품. 0 == 0 인 경우에도 시도했습니다! IF 문이 처음으로 작동하고 두 번째로 작동하지 않는 이유는 무엇입니까? – Spaceballs

1

당신의 서브 프로그램이 작동하지 않는 이유는. 당신은 % 사이의 공간이

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

는 %와 &을 실행합니다. 해당 공간은 % processed % 변수의 값에도 있습니다. 은 그래서 if 문에이

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

내가 마침내했습니다이

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

이것은 또한 SS64

관련 문제