簡體   English   中英

嘗試在VBScript中使用Shell對象和FileSystemObject進行文件操作

[英]Trying to use Shell object and FileSystemObject in VBScript for file manipulation

我試圖遞歸地遍歷數百個目錄和數千個JPG文件,以按日期收集對新文件夾中文件的排序。 到目前為止,我可以使用Shell NameSpace對象單獨獲取文件GetDetailsOf,並且還可以使用FileSystemObject遞歸地遍歷目錄。 但是,當我嘗試將它們放在函數等中時,當我嘗試從照片中獲取DateTaken屬性時,我什么也沒回來。

到目前為止,這是我的代碼:

sFolderPathspec = "C:\LocationOfFiles"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objDir = objFSO.GetFolder(sFolderPathspec)

Dim arrFiles()


getInfo(objDir)

Sub getInfo(pCurrentDir)
    fileCount = 0
    For Each strFileName In pCurrentDir.Files
        fileCount = fileCount + 1
    Next

    ReDim arrFiles(fileCount,2) 

    i=0
    For Each aItem In pCurrentDir.Files

        wscript.Echo aItem.Name
        arrFiles(i,0) = aItem.Name
        strFileName = aItem.Name
        strDir = pCurrentDir.Path
        wscript.echo strDir
        dateVar = GetDatePictureTaken(strFileName, strDir)  
        'dateVar = Temp2 & "_" & Temp3 & "_" & Temp1
        arrFiles(i,1) = dateVar
        WScript.echo i & "." & "M:" & monthVar & " Y:" & yearVar
        WScript.echo i & "." & strFileName & " : " & arrFiles(i,1) & " : " & dateVar
        i=i+1
    Next

    For Each aItem In pCurrentDir.SubFolders
       'wscript.Echo aItem.Name & " passing recursively"
       getInfo(aItem)
    Next

End Sub

Function GetDatePictureTaken(strFileName, strDir)

    Set objShell = CreateObject ("Shell.Application")
    Set objCurrFolder = objShell.Namespace(strDir)

    'wscript.Echo cstr(objCurrFolder.GetDetailsOf(strFileName, 12))

    strFileNameDate = cstr(objCurrFolder.GetDetailsOf(strFileName, 12))
    strFileNameDate = CleanNonDisplayableCharacters(strFileNameDate)
    arrDate = split(strFileNameDate, "/")
    '''FAILS HERE WITH A SUBSCRIPT OUT OF RANGE ERROR SINCE IT GETS NULL VALUES BACK FROM THE GET DETAILS OF FUNCTION'''
    monthVar = arrDate(0)
    yearVar = arrDate(1)
    dayVar = arrDate(2)

    GetDatePictureTaken = monthVar & "\" & dayVar & "\" & yearVar

End Function


Function CleanNonDisplayableCharacters(strInput)

      strTemp = ""
      For i = 1 to len(strInput)
          strChar = Mid(strInput,i,1)
          If Asc(strChar) < 126 and not Asc(strChar) = 63 Then
              strTemp = strTemp & strChar
          End If
      Next
      CleanNonDisplayableCharacters = strTemp

End Function

訪問arrDate(0)時出現“下標超出范圍”錯誤是由於arrDate為空(UBound(arrDate)== -1)引起的。 由於對非空字符串的拆分將返回一個數組,即使未找到分隔符,並且嘗試拆分Null也會引發“無效使用Null”錯誤,因此我們可以確定strFileNameDate為“”。

可能的原因:

  1. “拍攝的日期照片”的索引是25(XP),而不是12(Win 7),或者蓋茨先生想到的Win 8的索引。
  2. DPT屬性未填寫。
  3. 您的清潔功能搞砸了。

您必須測試包含有效日期的strFileNameDate,並確定沒有有效DPT的文件放置位置。

PS,而不是進行遞歸循環,您應該考慮使用

dir /s/b path\*.jpg > pictures.txt

並處理該文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM