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进行比较之前设置它? 有时,如果运行这部分代码,则时间通过似乎被评估为“”而不是它应该是什么。
感谢您的时间
答案 0 :(得分:3)
好吧,你在一个块中设置一个环境变量并在同一个块中读取它。这不起作用,因为cmd
在语句解析时扩展环境变量,而不是在执行时(并且块是语句,因此块%timepassed%
内部已被替换为在你进入街区之前它的价值。)
将变量扩展移动到语句的运行时添加
setlocal enabledelayedexpansion
在您的批处理开始时,使用!timepassed!
代替%timepassed%
。同样,对于在块中设置和使用的其他变量。