在批处理文件中获取文件时间(Windows)
Posted
技术标签:
【中文标题】在批处理文件中获取文件时间(Windows)【英文标题】:Getting file time in a batch file (windows) 【发布时间】:2021-01-16 05:38:11 【问题描述】:我正在寻找一种方法来检索批处理文件中的文件时间(精确到秒)。我正在尝试对最近修改的所有文件进行操作,而不是另一个文件。
我用过这个方法:
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 时间......但无法找到任何方法来做到这一点!)
谢谢!
【问题讨论】:
DELIMS
选项允许您指定多个分隔符。您不仅限于一个。
无论如何,您都可以像处理 DATE 和 TIME 一样对文件时间进行子串化。
在我看来,基于您有限的信息,您的整个方法似乎有点过于复杂。最简单的方法是执行目录列表,使用Dir
及其/A
选项作为-D
,以忽略目录。然后使用/O
选项对它们进行排序,并使用-D
按日期/时间对它们进行排序,以获得最新的优先。将所有这些作为命令包装在For /F
循环中,并输出每个结果,直到返回的文件与您已知的目标文件匹配。一旦匹配,就使用GoTo
命令跳出for-loop。
【参考方案1】:
您可以为此目的利用 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)
【讨论】:
以上是关于在批处理文件中获取文件时间(Windows)的主要内容,如果未能解决你的问题,请参考以下文章
Windows Batch - 如何将外部 IP 获取到批处理文件变量中