【问题标题】:batch - File last modification time with seconds批处理 - 以秒为单位的文件最后修改时间
【发布时间】:2014-01-29 09:32:26
【问题描述】:

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

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

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

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

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

如何以秒为单位批量获取时间?

【问题讨论】:

  • 它们不应该随机排序 - FAT32 具有 2 秒的时间戳粒度,但 NTFS 格式要精细得多。
  • 我再次控制,文件不是随机排序的,而是以正确的方式排序,即使分钟是相同的。也许我第一次检查时做错了什么。我的错误。谢谢你。 @foxidrive

标签: batch-file timestamp last-modified seconds


【解决方案1】:

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

【讨论】:

  • 好吧,但是我怎样才能使用它来获取时间作为我的批处理文件中的变量呢?该命令打开一个新的 cmd。我错了吗?
【解决方案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

【讨论】:

  • 我收到此错误消息:没有可用的实例。
  • 关于“No Instance(s) Available”问题,看这里(TLDR:只要使用文件的完整路径就可以了):superuser.com/questions/1024034/…
【解决方案3】:
wmic datafile where "drive='c:' and path='\\windows\\'" get "Last Modified",Name

【讨论】:

    【解决方案4】:

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

    @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
    

    【讨论】:

      猜你喜欢
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多