我正在寻找一种方法来检索批处理文件中的文件时间,一直到第二个。我正在尝试对所有最近被修改的文件执行操作。
我用过这种方法:
for %%a in (keyfile.dat) do set LAST_PUBLISHED_DATE=%%~ta
rem for %%x in (%LAST_PUBLISHED_DATE:/= %) do echo %%x
for /f "tokens=1,2 delims= " %%a in ("%LAST_PUBLISHED_DATE%") do (
set DATE=%%a
set TIME=%%b
)
for /f "tokens=1,2,3 delims=/" %%a in ("%DATE%") do (
set MON=000%%a
set DAY=000%%b
set YEAR=%%c
set MON=!MON:~-2,2!
set DAY=!DAY:~-2,2!
set YEAR=!YEAR:~-2,2!
)
for /f "tokens=1,2 delims=:" %%a in ("%TIME%") do (
set HOUR=000%%a
set MIN=000%%b
set HOUR=!HOUR:~-2,2!
set MIN=!MIN:~-2,2!
)
set INT_LASTPUBLISHEDDATE=%YEAR%%MON%%DAY%%HOUR%%MIN%
我一直在使用它将上次修改的日期转换为int,我可以将其与其他文件进行比较。效果很好。但有时我可能需要更频繁地运行此批处理,而不是每分钟运行一次。
有没有一些扩展的方式,我也可以得到";秒";从文件修改时间?上面的方法以yyyy/mm/dd hh:mm格式返回它。
(最理想的情况是只得到最后一次修改的unix时间……但还没有找到任何方法!(
谢谢!
您可以为此目的利用vbs。
@Echo Off & Setlocal EnableDelayedExpansion
(For /F "Delims=" %%G in ('TYPE "%~F0" ^| Findstr /BLIC::::') Do (Set "Line=%%G"&Echo/!Line:~3!))>"filetimes.vbs"
For /F "Delims=" %%G in ('cscript //nologo filetimes.vbs %~nx0')Do Set "%%G"
Set %~F0[
Exit /B
:::Set objFSO = CreateObject("Scripting.FileSystemObject")
:::if WScript.Arguments.Count = 0 Then
::: WScript.Quit
:::End If
:::strfileFolder = objFSO.GetAbsolutePathName(WScript.Arguments(0))
:::'this line only works with cscript
:::Set v = objFSO.GetFile(WScript.Arguments(0))
:::dm=v.DateLastModified
:::dc=v.DateCreated
:::da=v.DateLastAccessed
:::WScript.StdOut.WriteLine(strfileFolder&"[Created]="&dc)
:::WScript.StdOut.WriteLine(strfileFolder&"[Modified]="&dm)
:::WScript.StdOut.WriteLine(strfileFolder&"[Accessed]="&da)