2012-07-19 7 views
1
In my batch script I have the following: 

if somecondition (
    exit 
) else ( 
    for /F "USEBACKQ tokens=4,6,8" %%a in (systeminfo ^| qgrep -e "System Up Time:") do set days=%%a&set hours=%%b&set minutes=%%c 
    set /A timepassed=%days%*24*60+%hours%*60+%minutes% 
    if "%timepassed%" leq 30 (
    echo %timepassed% 
    ) else (
    echo %time$ 
    ) 
) 

변수 timepassed가 값 30과 비교되기 전에 설정되도록하는 방법이 있습니까? 때때로이 코드 부분이 실행되면 timepassed는 예상되는 시간 대신 ""으로 평가됩니다. 시간명령이 완료 될 때까지 기다리십시오.

+0

다른 블록에서이 작업을 수행하고 있습니까? – Joey

+0

네, 정말 빨리 수정했습니다. –

답변

3

음에 대한

덕분에, 당신은 블록에서 환경 변수를 설정하고 같은 블록을 읽는. 문이 인 경우 문맥이 일 때 환경 변수가 확장되어 실행되지 않고 (블록이 명령문이므로 문 블록이므로 %timepassed%은 이미 블록에 들어가기 전에 값으로 대체되었습니다) cmd이 환경 변수를 확장하므로 작동하지 않습니다.

은 배치의 시작

setlocal enabledelayedexpansion 

을 추가 문의 런타임 변수 확장을 이동하고 대신 %timepassed%!timepassed!을 사용합니다. 블록에서 설정되고 사용되는 다른 변수에 대해서도 마찬가지입니다.

+0

문제를 확실히 해결해야합니다. – iesou

관련 문제