2011-03-03 222 views
4

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

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

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

如果不与VBScript/FileSystemObject,会有任何其他方式吗?

回答

6

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

我花了一段时间才弄清楚为什么一开始就出错。原来,你必须提供双反斜线的文件路径,如c:\\ temp \\ file.txt。然后它工作。 – mgr326639 2011-03-03 14:37:37

+1

函数'oDateTime.Microseconds'将使我的粒度达到微秒。其中有10个因素缺失达到100纳秒。但是你的回答无论如何都解决了我的问题。 – mgr326639 2011-03-03 22:50:52

0

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

我不知道从VBS读取64位FILETIME的方法,特别是因为VBS本身不处理64位数字。一旦你有了FILETIME,你可以用SWbemDateTime来解析它。这是一个example