[英]How to deal with windows batch variable?
我已经写了以下一批,但恐怕它无法达到我的期望:
@echo off
set filename=%1
for /f "tokens=* USEBACKQ" %%F in (`forfiles /m "%filename%" /c "cmd /c echo @ftime"`) do (
set R1=%%F
)
:process
ping -n 60 127.0.0.1 > nul
for /f "tokens=* USEBACKQ" %%F in (`forfiles /m "%filename%" /c "cmd /c echo @ftime"`) do (
set R2=%%F
)
setlocal enabledelayedexpansion
if !R1! == !R2! (
echo no change
) else (
echo kill process
set R1=!R2!
echo !R1!
taskkill /im schedule2.exe
schedule2.exe
)
endlocal
goto process
该批处理用于检查指定文件的修改时间(调用此批处理时,文件名作为参数传递),该时间是最早记录的,并在60秒后再次检查修改时间。 如果文件被修改,请杀死一个特定的进程(在我的案例中为schedule2.exe),然后将开始时获得的时间重置并更改为观察到的最新时间。 由于使用了enabledelayedexpansion,R1的值也消失了,我该怎么做才能获得想要的结果? 非常感谢
卸下selocal/endlocal
支架。 在这个范围内没有什么需要delayedexpansion
。
您还需要更改!var!
到%var%
范围内,因为不调用delayedexpansion
。
您的问题是您要在子例程中添加r1
,但是由于r1
当前位于setlocal/endlocal
括号内,因此在遇到endlocal
时将endlocal
更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.