3

我想知道最后一次修改文件的时间。

我可以使用以下批处理脚本获取这些信息:

FOR %%i IN (myfile) DO SET modif_time=%%~ti

问题是我需要最后修改的第二个,并且该命令%~t仅返回日期和时间,只有小时和分钟。

我只能通过逐个文件手动查看“属性窗口”文件来检查秒数。

如何批量获取秒数?

4

4 回答 4

5

Windows 7 及更高版本(或通过用于 XP 的资源工具包)中,您可以使用forfiles此功能。就像是:

forfiles /m *.* /c "cmd /c ECHO The last modified date of: @file is: @ftime"

在包含以下文件的目录中:

myTest.txt
myTest2.txt

我得到:

The last modified date of: "myTest.txt" is: 13:21:07
The last modified date of: "myTest2.txt" is: 13:21:20
于 2014-01-10T12:23:26.343 回答
2
wmic datafile where name="FileName" get LastModified

FileName必须包含带有双退格的完整路径。


排序示例(最近的第一个):

for /f "delims=" %a in ('wmic datafile where "drive='c:' and path='\\windows\\'" get LastModified^,Name /format:table^|find ":"^|sort /r') do @echo %a
于 2014-01-10T12:27:40.203 回答
1
wmic datafile where "drive='c:' and path='\\windows\\'" get "Last Modified",Name
于 2014-01-10T12:26:48.100 回答
1

您可以在批处理文件中嵌入一个小的 JScript 以获取最后修改的时期:

@if (@a==@b) @end /*
@echo off
SetLocal EnableDelayedExpansion

set EPOCH=0
FOR /F "delims=" %%D in ('cscript /nologo /e:jscript "%~f0" "%1"') do (
    set EPOCH=%%D
)
echo Last modified (epoch-seconds): !EPOCH!

goto :eof
*/

var fs = new ActiveXObject("Scripting.FileSystemObject");
var filename = WSH.Arguments(0)
var millis = -1
if (fs.FileExists(filename))
{
    var file = fs.GetFile(filename);
    millis = Date.parse(file.DateLastModified) / 1000;
}
WSH.Echo(millis);

/* */在作为 JScript 运行时注释掉批处理脚本,@if (@a==@b) @end并且goto :eof将在作为批处理脚本运行时跳过 JScript

>epoch.bat epoch.bat
Last modified (epoch-seconds): 1533282229

>epoch.bat "epoch.bat"
Last modified (epoch-seconds): 1533282229

>epoch.bat notareal.file
Last modified (epoch-seconds): -1
于 2018-08-03T07:48:00.780 回答