我写了下面的批次,但恐怕它不工作接近我很期待:如何处理windows批处理变量?
@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的值也会消失,那么我能做些什么来实现我想要的结果呢?非常感谢
将'setlocal enabledelayedexpansion'移到脚本的顶部,直接在'@echo off'下面。 – SomethingDark
在这种情况下,文件名的值也消失了,但它应该保持全局并永远持续 –
请遵循@ SomethingDark的建议**和**删除'endlocal'。 – JosefZ