显示 100 纳秒粒度的 NTFS 时间戳

发布于 2024-10-20 06:11:52 字数 283 浏览 4 评论 0原文

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

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

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

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

I understand that the FAT file system stores its time stamps for files (modify date, etc.) with a 2 second granularity, and NTFS stores them with a 100 nsec granularity.

I'm using VBScript with FileSystemObject to show file details. The function file.DateLastModified shows me the date with a 1 second precision (on NTFS).

Is there a way to show the time stamps with a precision according to the internal storage granularity of NTFS. I'm imagining something like 8/9/2010 14:40:30,1234567

And if not with VBScript / FileSystemObject, would there be any other way?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

江湖正好 2024-10-27 06:11:52

文件时间戳在 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")

File timestamps are held as FILETIME in NTFS but the millisecond portion is not passed to the Variant DateTime so VBS doesn't see it. The WMI object can support this though.

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")
墨离汐 2024-10-27 06:11:52

通过本机 Windows API 可以轻松访问全精度文件时间。此 MSDN 文章介绍了如何执行此操作:文件时间

我不知道有什么方法可以从 VBS 读取 64 位 FILETIME,特别是因为 VBS 本身不处理 64 位数字。有了 FILETIME 后,您可以使用 SWbemDateTime 解析它,不过。这是一个示例

Full-precision file times are easily accessible via the native Windows API. This MSDN article explains how to do it: File Times.

I do not know of any way to read the 64-bit FILETIME from VBS, especially since VBS does not handle 64-bit numbers natively. Once you have a FILETIME you can parse it with SWbemDateTime, though. Here is an example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文