batch - 以秒为单位记录上次修改时间

时间:2014-01-10 12:00:21

标签: batch-file timestamp last-modified seconds

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

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

  

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

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

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

如何批量获得秒数?

4 个答案:

答案 0 :(得分:4)

Windows 7并转发(或通过Resource Kit for 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

答案 1 :(得分: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

答案 2 :(得分:1)

wmic datafile where "drive='c:' and path='\\windows\\'" get "Last Modified",Name

答案 3 :(得分:0)

您可以在批处理文件中嵌入一个小的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) @endgoto :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