【发布时间】:2015-10-09 09:33:00
【问题描述】:
我正在尝试解决我正在监视特定目录的问题。我的批处理程序监视被修改的文件并将它们记录在 txt 文件中。到目前为止,我已经编写了可以检测文件何时更改并可以打印时间戳的代码。
但现在我还需要它来记录刚刚修改的文件的名称。谁能帮我解决这个问题。这是我到目前为止所做的:
@Echo Off
Set _Delay=10
Set _Monitor=C:\Users\MMurshed\Desktop\New folder (3)
Set _Base=%temp%\BaselineState.dir
Set _Chck=%temp%\ChkState.dir
Set _OS=6
Ver|Findstr /I /C:"Version 5">Nul
If %Errorlevel%==0 Set _OS=5 & Set /A _Delay=_Delay*1000
:_StartMon
Call :_SetBaseline "%_Base%" "%_Monitor%"
:_MonLoop
If %_OS%==5 (Ping 1.0.0.0 -n 1 -w %_Delay%>Nul) Else Timeout %_Delay%>Nul
Call :_SetBaseline "%_Chck%" "%_Monitor%"
FC /A /L "%_Base%" "%_Chck%">Nul
If %ErrorLevel%==0 Goto _MonLoop
::
:: Insert code to run when a change occurs
::
Echo.Change Detected
Echo.Timestamp = %date:~0,2%%date:~3,2%%date:~6,8%-%time:~0,2%%time:~3,2%%time:~6,2%
Goto :_StartMon
:::::::::::::::::::::::::::::::::::::::::::::::::::
:: Subroutine
:::::::::::::::::::::::::::::::::::::::::::::::::::
:_SetBaseline
If Exist "%temp%\tempfmstate.dir" Del "%temp%\tempfmstate.dir"
For /F "Tokens=* Delims=" %%I In ('Dir /S "%~2"') Do (
Set _Last=%%I
>>"%temp%\tempfmstate.dir" Echo.%%I
)
>"%~1" Findstr /V /C:"%_Last%" "%temp%\tempfmstate.dir"
Goto :EOF
【问题讨论】:
-
它可能不是您正在寻找的技术,但它可能会有所帮助。 gallery.technet.microsoft.com/scriptcenter/…
标签: batch-file directory last-modified