2013-03-27 108 views
0

如果有以下VBScript用於遞歸查找一組文件夾中的所有文件。我只是在網絡上發現了這一點,並不能讚揚它。查找在某個日期拍攝的所有照片

fileExtension = ".jpg" 
folderPath = "C:\Pictures" 
computerName = "." 
arrFIL = Array() 

If Right(folderPath,1) = "\" Then folderPath = Left(folderPath,Len(folderPath)-1) 

Set wmiObject = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & computerName & "\root\cimv2") 
Set folderObject = wmiObject.Get("Win32_Directory='" & folderPath & "'") 

EnumFolders folderObject, wmiObject, arrFIL 
strFIL = UBound(arrFIL) + 1 & " files found with extension '" & fileExtension & "':" & vbCrLf & vbCrLf 

For intFIL = 0 To UBound(arrFIL) 
    Set objFile = objFSO.GetFile(arrFIL(intFIL)) 
    strFIL = strFIL & arrFIL(intFIL) & vbCrLf 
Next 
WScript.Echo strFIL 

Sub EnumFolders(folderObject, wmiObject, arrFIL) 
    On Error Resume Next 
    Dim objSD1 
    Dim objSD2 
    Dim objFI1 
    Dim objFI2 
    Set objSD1 = wmiObject.ExecQuery("Associators of {Win32_Directory.Name='" & fold erObject.Name & "'} Where AssocClass=Win32_SubDirectory ResultRole=PartComponent") 

    For Each objSD2 in objSD1 
     EnumFolders objSD2, wmiObject, arrFIL 
    Next  
    On Error Goto 0 

    Set objFI1 = wmiObject.ExecQuery("Associators of {Win32_Directory.Name='" & folderObject.Name & "'} Where ResultClass=CIM_DataFile") 
    For Each objFI2 in objFI1 
    If Right(objFI2.Name,Len(fileExtension)) = fileExtension Then 
     intFIL = UBound(arrFIL) + 1 
      ReDim Preserve arrFIL(intFIL) 
      arrFIL(intFIL) = objFI2.Name 
     End If 
    Next 
End Sub 

我需要做的是對一堆文件夾運行此,C中:\圖片,並將它返回的所有文件存放照片的拍攝日期屬性是本月23日。這可能嗎?我將如何實現這一目標?

感謝

回答

1

我會使用Shell.Application對象,而不是WMI的:

Const Name  = 0 
Const DateTaken = 12 

folderPath = "C:\Pictures" 

Set re = New RegExp 
re.Pattern = "[^0-9:./ ]" 
re.Global = True 

Traverse CreateObject("Shell.Application").Namespace(folderPath) 

Sub Traverse(fldr) 
    For Each obj In fldr.Items 
    If obj.IsFolder Then 
     Traverse obj.GetFolder 
    ElseIf LCase(obj.Type) = "jpeg image" Then 
     If Day(re.Replace(fldr.GetDetailsOf(obj, DateTaken), "")) = 23 Then 
     WScript.Echo fldr.GetDetailsOf(obj, Name) 
     End If 
    End If 
    Next 
End Sub 
+0

謝謝你回來給我這麼快。但是,我收到'Type mismatch:'[string:「?23 /?05 /?2012 ?? 11:3」]''作爲錯誤消息。當我輸出文件夾中所有文件的日期時,它們似乎被包裹在'?' – Danny 2013-03-29 22:02:43

+0

我還不得不取出'ElseIf LCase(obj.Type)=「jpeg image」然後'並將其替換爲標準'Else'。 – Danny 2013-03-29 22:05:57

+1

我明白了。 '採取日期'字段似乎使用某種編碼。雖然您可以簡單地使用正則表達式刪除其他字符(請參閱更新後的答案)。至於類型,您可能需要將引用字符串('「jpeg image」')調整爲系統上指定的類型。如果你想處理不同類型的圖片,你必須擴展支票(或者如果你想要處理所有文件,請將其全部刪除)。 – 2013-03-30 11:22:47