我一直在使用以下命令来获取文件日期。但是,自从我们迁移到另一台服务器(Windows Server 2003)以来,fileDate
变量一直返回空白值。
FOR /f %%a in ('dir myfile.txt^|find /i " myfile.txt"') DO SET fileDate=%%a
有没有其他更可靠的方法来获取文件日期?
将%
更改为%%
以用于批处理文件,对于%~ta
语法输入call /?
for %a in (MyFile.txt) do set FileDate=%~ta
你能行的
forfiles /M myfile.txt /C "cmd /c echo @fdate @ftime"
使用批处理文件获取文件属性的有用参考是最后修改时间:
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:?
)
它适用于Vista。有些事要尝试:
find
替换为find命令的完全限定路径。 find
是一个常见的工具名称。有一个unix发现与Windows内置查找非常不同。像这样:
FOR /f %%a in ('dir ^|%windir%\system32\find.exe /i "myfile.txt"') DO SET fileDate=%%a
FOR /f %a in ('dir ^|c:\windows\system32\find.exe /i "myfile.txt"') DO SET fileDate=%a
这可能会给你一些想法。dir | c:\windows\system32\find.exe /i "myfile.txt"
这应该会告诉你需要看什么。
如果您仍然无法解决这个问题,请编辑您的帖子以包含您从这些命令中看到的内容,并且有人会帮助您。
您也可以使用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
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
从命令行执行此操作)
要以与语言环境无关的方式获取文件的最后修改日期/时间,您可以将wmic
command与DataFile
别名一起使用:
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%"
要获取创建日期/时间或上次访问日期/时间,只需分别用LastModified
或CreationDate
替换属性LastAccessed
。要获取有关目录而不是文件的信息,请使用别名FSDir
而不是DataFile
。
要指定包含,
和)
的文件(或目录)路径/名称,这些路径/名称通常不被wmic
接受,请查看this question。