【发布时间】: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。
标签: windows file batch-file command-prompt