繁体   English   中英

Windows批处理变量如何处理?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM