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

问题描述 投票:18回答:6

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

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

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

windows batch-file command
6个回答
36
投票

%更改为%%以用于批处理文件,对于%~ta语法输入call /?

for %a in (MyFile.txt) do set FileDate=%~ta

11
投票

你能行的

forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"

7
投票

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

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:?
)

2
投票

它适用于Vista。有些事要尝试:

  1. find替换为find命令的完全限定路径。 find是一个常见的工具名称。有一个unix发现与Windows内置查找非常不同。像这样: FOR /f %%a in ('dir ^|%windir%\system32\find.exe /i "myfile.txt"') DO SET fileDate=%%a
  2. 检查cmd.exe窗口中的命令输出。为此,您需要将%%替换为%。 FOR /f %a in ('dir ^|c:\windows\system32\find.exe /i "myfile.txt"') DO SET fileDate=%a 这可能会给你一些想法。
  3. 如果显示为空白,则再次在命令提示符处尝试以下操作: dir | c:\windows\system32\find.exe /i "myfile.txt"

这应该会告诉你需要看什么。

如果您仍然无法解决这个问题,请编辑您的帖子以包含您从这些命令中看到的内容,并且有人会帮助您。


1
投票

您也可以使用vbscript获取文件修改日期

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
WScript.Echo objFS.GetFile(strFile).DateLastModified

将上面保存为mygetdate.vbs并在命令行中保存

c:\test> cscript //nologo mygetdate.vbs myfile

0
投票

dir myfile.txt在当前目录中给出了什么输出(确切)?如果设置分隔符会发生什么?

FOR /f "tokens=1,2* delims= " %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a 

(注意delims=之后的空格) (为了让生活更轻松,你可以通过用%%a替换%a从命令行执行此操作)


0
投票

要以与语言环境无关的方式获取文件的最后修改日期/时间,您可以将wmic commandDataFile别名一起使用:

wmic DataFile where "Name='D:\\Path\\To\\myfile.txt'" get LastModified /VALUE

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

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

LastModified=20190812130000.000000+120

要使用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"

第二个for /F循环通过第一个wmic循环(参见for /F)将this answer的Unicode输出转换为ASCII / ANSI文本,避免了人工制品(如孤立的回车符)。

然后,您可以使用sub-string expansion从中提取纯日期或时间:

set "DateOnly=%DateTime:~0,8%"
set "TimeOnly=%DateTime:~8,6%"

要获取创建日期/时间或上次访问日期/时间,只需分别用LastModifiedCreationDate替换属性LastAccessed。要获取有关目录而不是文件的信息,请使用别名FSDir而不是DataFile

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

查看this post以及this one,了解如何获取文件和目录日期/时间戳。

© www.soinside.com 2019 - 2024. All rights reserved.