2011-03-03 226 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