2012-07-19 75 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$ 
    ) 
) 

有什麼辦法可以確保變量timepass被設置之前,它是與值30相比嗎? 有時候,如果這部分代碼運行,timepass似乎被評估爲「」,而不是它應該是什麼。等到命令完成批處理

感謝您的時間

+0

你是否在另一個塊中做這個? – Joey 2012-07-19 19:20:43

+0

是的,我修改它真的很快 – 2012-07-19 19:22:03

回答

3

嗯,你在一個塊設置環境變量,並在同一個塊讀它。這是行不通的,因爲cmd擴展環境變量時,語句是解析,而不是當它被執行(和一個塊是一個語句,所以在你甚至輸入塊之前,塊%timepassed%已被其值取代)。

要移動變量擴展到語句的運行時添加

​​

你批的啓動和使用!timepassed!代替%timepassed%。對於在塊中設置和使用的其他變量也是如此。

+0

這應該明確地解決您的問題。 – iesou 2012-07-19 20:23:04