我写过以下批次,但我担心它并没有接近我所期待的那样:
@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的值也不见了,我能做些什么才能达到我想要的效果呢?非常感谢
答案 0 :(得分:1)
删除selocal/endlocal
括号。该括号内没有任何内容需要delayedexpansion
。
您还需要将!var!
更改为%var%
,因为delayedexpansion
之后不会被调用。
您的问题是您在子例程中煽动r1
,但由于目前在setlocal/endlocal
括号范围内,因此在遇到endlocal
时会撤消更改。