2017-12-02 223 views
3

我試圖從腳本運行的文件夾中的視頻文件獲取擴展文件屬性,並將結果輸出到文本文件。從文件中獲取擴展屬性

這是我到目前爲止的代碼:

Dim ls, fsObj, fd, fs, fl, sfs, sf, tf 

    ' specify the file extensions to list 
    dim fileTypes 
    fileTypes = Array("mp4","mkv","avi") 

On Error Resume Next 

    ls = "" 
    Set fsObj = CreateObject("Scripting.FileSystemObject") 
    Set fd = fsObj.GetFolder(".") 
Set objFolder = objShell.NameSpace(fsObj) 
    set fs = fd.Files 

For Each fileName in objFolder.Items 
    set objFolderItem = objFolder.ParseName(fileName) 
    size = objFolder.GetDetailsOf(objFolderItem, 1) 
    length = objFolder.GetDetailsOf(objFolderItem, 27) 
    height = objFolder.GetDetailsOf(objFolderItem, 283) 
    width = objFolder.GetDetailsOf(objFolderItem, 285) 
Next 


    ' list subfolders 
    set sfs = fd.SubFolders 
    For Each sf in sfs 
     ls = ls & sf.name & vbCrLf & chr(10) 
    Next 

     For Each fl in fs 
     ' check whether the extension matches 
     if arrayContains(fileTypes, fsObj.GetExtensionName(fl.name))then 
    ls = ls & fl.name & vbtab & length & vbCrLf & chr(10) 

     end if 
    Next 
    Set tf = fsObj.OpenTextFile("index.txt", 2, True, False) 

    tf.Writeline ls 

    tf.Close 
    Set fsObj = Nothing 

    function arrayContains (arr, val)    
     dim found 
     found = false 
     for i = 0 to ubound(arr) 
      if arr(i) = val then  
       found = true 
       exit for 
      end if 
     next 
     arrayContains = found    
    end function 

我試圖獲取文件名和長度,一旦我能,我可以添加其他。

據我猜測,我需要指定objFolder.ParseName(fileName)。我如何指定與文件類型數組匹配的所有文件?我試過fl.name和fd.files。我不知道還有什麼要嘗試。

我雙擊在Windows 7

腳本從Windows資源管理VBS文件運行腳本,沒有錯誤,運行和返回的文件名,但不返回擴展屬性。任何幫助將不勝感激。

+0

首先,從我們這一說法擺脫'在錯誤恢復next'並重新執行該腳本,並告訴我們你是怎麼得到的錯誤到現在? – Hackoo

+0

我做到了,並得到第40行char 5權限被拒絕。 –

+0

嗯,我嘗試了一些代碼在我的系統上,它的工作原理,但只適用於mp4文件。對於flv,avi,mkv,我只能檢索它們的大小(但不是長度,幀高和寬度)。我可以分享代碼,如果你想 – Gurman

回答

3

下面的代碼能夠獲取像mp4文件的名稱,大小,長度,幀高度和幀寬的詳細信息。對於格式爲flv,avi,mkv的文件,只能提取它們的名稱和大小。對於這些文件,即使在右鍵單擊它們時,選擇屬性並轉到「詳細信息」選項卡,您將看不到有關它們的長度,高度和寬度的信息。但是對於mp4,你會看到所有這些細節。

試試這個代碼:

Set fso = CreateObject("scripting.filesystemobject") 
Set obs = CreateObject("shell.application") 
Set fol = fso.GetFolder(".") 
Set spl = obs.NameSpace(fol.Path) 
Set files = fol.Files 
filePath = fol.path&"\Info.txt" 
set objFile = fso.openTextFile(filePath,2,true,true) 

arr = Array("mp4", "mkv", "avi", "flv") 

For Each file In files 
    ext = fso.GetExtensionName(file.Name) 
    For Each ex In arr 
     If StrComp(ext,ex,1)=0 Then 
      objFile.writeline "NAME: "&spl.GetDetailsOf(spl.ParseName(file.Name),0)&vbcrlf&_ 
           "SIZE: "&spl.GetDetailsOf(spl.ParseName(file.Name),1)&vbcrlf&_ 
           "LENGTH: "&spl.GetDetailsOf(spl.ParseName(file.Name),27)&vbcrlf&_ 
           "FRAME HEIGHT: "&spl.GetDetailsOf(spl.ParseName(file.Name),283)&vbcrlf&_ 
           "FRAME WIDTH: "&spl.GetDetailsOf(spl.ParseName(file.Name),285)&vbcrlf&string(50,"==") 
      Exit For 
     End If 
    Next 

Next 
objFile.Close 
set objFile = Nothing 
set files = nothing 
set spl = nothing 
set fol = nothing 
set obs = nothing 
set fso = nothing 
+0

這太棒了。難以寫入文件嗎?對不起,我對vbs很新。 –

+0

@SimoneM我已經更新了代碼。現在所有的信息將被寫入同一個文件夾中名爲「Info.txt」的文本文件。 – Gurman

+0

這幾乎是完美的。我一直在玩它,我想要的其他屬性之一是比特率。就像一個快速測試,我將框架高度的283更改爲28,並得到一個錯誤:無效的procdure調用或參數。 –