2017-12-02 36 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

をVBSファイルをクリックすることで、スクリプトを実行しているスクリプトがエラーなしで実行され、ファイル名を返しますが、拡張プロパティを返しません。どんな助けでも大歓迎です。

+0

まず、 'この文から取り除くと、このスクリプトを再実行し、あなたが今までエラーとして手に入れたのを教えて:

は、このコードを試してみてください? – Hackoo

+0

私はそれをして40行目を得ました5許可が拒否されました。 –

+0

私は自分のシステムでいくつかのコードを試してみましたが、mp4ファイルの場合にのみ動作します。 flv、avi、mkvの場合は、サイズ、長さ、フレームの高さ、幅は取得できませんでした。あなたが望むなら私はコードを共有することができます – Gurman

答えて

3

次のコードは、mp4ファイルの名前、サイズ、長さ、フレームの高さ、フレームの幅などの詳細を取得できます。 flv、avi、mkvの形式のファイルについては、名前とサイズのみを抽出することができます。これらのファイルの場合は、右クリックしてプロパティを選択して[詳細]タブに移動しても、長さ、高さ、幅に関する情報は表示されません。しかし、mp4の場合は、これらすべての詳細を見ることができます。エラー再開next`で

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

それは素晴らしいです。ファイルに書き込むのは難しいですか?申し訳ありませんが、私は非常にVBの新人です。 –

+0

@SimoneMコードを更新しました。すべての情報は、同じフォルダ内の "Info.txt"というテキストファイルに書き込まれます。 – Gurman

+0

これはほぼ完璧です。私はそれを持って遊んでいて、私が欲しい他のプロパティの1つはビットレートです。速いテストと同じように、私はフレーム高さ283を28に変更し、エラーが発生しました:プロシージャコールまたは引数が無効です。 –

関連する問題