2012-07-19 72 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