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 似乎被评估为 "" 而不是它应该是什么。

谢谢你的时间

4

1 回答 1

3

好吧,您在一个块中设置一个环境变量并在同一个块中读取它。这不起作用,因为在解析cmd语句时扩展环境变量,而不是在执行语句时(并且块是语句,因此在您进入块之前,块内部已经被它的值替换)。%timepassed%

要将变量扩展移动到语句的运行时添加

setlocal enabledelayedexpansion

在批次开始时!timepassed!使用%timepassed%. 对于在块中设置和使用的其他变量也是如此。

于 2012-07-19T19:28:24.220 回答