如何在Windows命令行上获取文件的上次修改日期?

Ric*_*pit 19 windows command batch-file

我一直在使用以下命令来获取文件日期.但是,fileDate自从我们移动到另一台服务器(Windows Server 2003)以来,该变量一直在返回空白值.

FOR /f %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a 
Run Code Online (Sandbox Code Playgroud)

有没有其他更可靠的方法来获取文件日期?

And*_*ris 36

更改%%%在批处理文件中使用,对于%~ta语法进入call /?

for %a in (MyFile.txt) do set FileDate=%~ta
Run Code Online (Sandbox Code Playgroud)

  • +1.这实际上是正确的.解析"dir"的输出充其量只是精神错乱.旁注:在批处理文件中,加倍'%`符号. (6认同)
  • 你能告诉我这里究竟发生了什么吗?我不确定我明白%~ta或%a是什么 (2认同)

小智 13

你能行的

forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"
Run Code Online (Sandbox Code Playgroud)


Pod*_*.io 8

使用批处理文件获取文件属性的有用参考是最后修改时间:

FOR %%? IN ("C:\somefile\path\file.txt") DO (
    ECHO File Name Only       : %%~n?
    ECHO File Extension       : %%~x?
    ECHO Name in 8.3 notation : %%~sn?
    ECHO File Attributes      : %%~a?
    ECHO Located on Drive     : %%~d?
    ECHO File Size            : %%~z?
    ECHO Last-Modified Date   : %%~t?
    ECHO Drive and Path       : %%~dp?
    ECHO Drive                : %%~d?
    ECHO Fully Qualified Path : %%~f?
    ECHO FQP in 8.3 notation  : %%~sf?
    ECHO Location in the PATH : %%~dp$PATH:?
)
Run Code Online (Sandbox Code Playgroud)


asc*_*pfl 6

要以与语言环境无关的方式获取文件的最后修改日期/时间,您可以使用带有别名的wmic命令DataFile

wmic DataFile where "Name='D:\\Path\\To\\myfile.txt'" get LastModified /VALUE
Run Code Online (Sandbox Code Playgroud)

请注意,必须提供文件的完整路径,并且所有路径分隔符(反斜杠\)在此处必须加倍。

这将返回这样的标准化日期/时间值(意味着2019 年 8 月12,13:00:00,UTC + 120'):

LastModified=20190812130000.000000+120
Run Code Online (Sandbox Code Playgroud)

要捕获日期/时间值 use for /F,然后您可以使用以下方法将其分配给变量set

for /F "delims=" %%I in ('
    wmic DataFile where "Name='D:\\Path\\To\\myfile.txt'" get LastModified /VALUE
') do for /F "tokens=1* delims==" %%J in ("%%I") do set "DateTime=%%K"
Run Code Online (Sandbox Code Playgroud)

第二个for /F循环避免wmic了第一个for /F循环将 Unicode 输出转换为 ASCII/ANSI 文本时的人工制品(如孤立的回车符)(另请参阅此答案)。

然后,您可以使用子字符串扩展来从中提取纯日期或时间:

set "DateOnly=%DateTime:~0,8%"
set "TimeOnly=%DateTime:~8,6%"
Run Code Online (Sandbox Code Playgroud)

要获得创建日期/时间或最后访问日期/时间,只需更换物业LastModifiedCreationDateLastAccessed分别。要获取有关目录而不是文件的信息,请使用别名FSDir而不是DataFile.

要指定包含,)通常不被接受的文件(或目录)路径/名称wmic,请查看此问题

退房还这篇文章以及这一个有关如何获取文件和目录的日期/时间戳记。