5

我知道 FAT 文件系统以 2 秒的粒度存储文件的时间戳(修改日期等),而 NTFS 以 100 纳秒的粒度存储它们。

我正在使用带有 FileSystemObject 的 VBScript 来显示文件详细信息。函数 file.DateLastModified 以 1 秒的精度显示日期(在 NTFS 上)。

有没有办法根据 NTFS 的内部存储粒度精确显示时间戳。我想像 8/9/2010 14:40:30,1234567

如果不使用 VBScript / FileSystemObject,还有其他方法吗?

4

2 回答 2

8

文件时间戳在 NTFS 中作为 FILETIME 保存,但毫秒部分不会传递给 Variant DateTime,因此 VBS 看不到它。WMI 对象可以支持这一点。

Sub PrintTimestamp(sFilename)
  Set oWMI = GetObject("winmgmts:!\\.\root\cimv2")
  Set oFiles = oWMI.ExecQuery("Select * from CIM_DataFile where Name = '" & sFilename & "'")
  Set oDateTime = CreateObject("WbemScripting.SWbemDateTime")
  For Each oFile in oFiles
    oDateTime.Value = oFile.LastAccessed
    WScript.Echo oFile.Name & " " & oDateTime.GetVarDate & " " & oDateTime.Microseconds
  Next
End Sub
PrintTimestamp("c:\\temp\\demo.vbs")
于 2011-03-03T13:32:30.727 回答
0

通过本机 Windows API 可以轻松访问全精度文件时间。这篇 MSDN 文章解释了如何做到这一点:文件时间

我不知道有什么方法可以从 VBS 读取 64 位 FILETIME,尤其是因为 VBS 本身不处理 64 位数字。但是,一旦有了 FILETIME ,您就可以使用SWbemDateTime对其进行解析。这是一个例子

于 2011-03-03T13:23:39.037 回答