VBScript を使用して変数に mp3 ファイルの長さを秒単位で取得する方法があるかどうか疑問に思っていました。
3 に答える
( JScriptに関する同様の質問への私の回答から適応。)
GetDetailsOf
Windows Shellオブジェクトのメソッドを使用してFolder
、オーディオ ファイルの長さを取得できます。この手法は、メタデータを Windows エクスプローラーでネイティブに読み取って表示できるすべてのオーディオ ファイルの種類をサポートします。
ただし、Length 属性のインデックスは、Windows のバージョンによって異なることに注意してください。Windows XP/2003 では 21、Windows Vista 以降では 27 です。詳細については、このページとこの私の回答を参照してください。スクリプトでこれを考慮する必要があります。
コード例:
Const LENGTH = 27 ' Windows Vista+
' Const LENGTH = 21 ' Windows XP
Dim oShell : Set oShell = CreateObject("Shell.Application")
Dim oFolder : Set oFolder = oShell.Namespace("C:\Music")
Dim oFile : Set oFile = oFolder.ParseName("Track.mp3")
Dim strLength : strLength = oFolder.GetDetailsOf(oFile, LENGTH)
WScript.Echo strLength
出力例:
00:05:18
別の方法として、Windows Media Player コントロール ライブラリを使用する方法があります。これを使用する前に、パスが正しいことを確認してください。
Function MediaDuration(path)
With CreateObject("Wmplayer.OCX")
.settings.mute = True
.url = path
Do While Not .playState = 3 'wmppsPlaying
WScript.Sleep 50
Loop
MediaDuration = Round(.currentMedia.duration) 'in seconds
'MediaDuration = .currentMedia.durationString 'in hh:mm:ss format
.Close
End With
End Function
WScript.Echo MediaDuration("C:\media\song.mp3")
Set objShell = CreateObject("Shell.Application")
Set Ag=Wscript.Arguments
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\" & Wscript.ScriptName & "\", Chr(34) & Wscript.ScriptFullName & Chr(34)
WshShell.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\App Paths\" & Left(Wscript.ScriptName, Len(Wscript.ScriptName)-3) & "exe" & "\", Chr(34) & Wscript.ScriptFullName & Chr(34)
Set Fldr=objShell.NameSpace(Ag(0))
Set FldrItems=Fldr.Items
Set fso = CreateObject("Scripting.FileSystemObject")
Set DeskFldr=objShell.Namespace(16)
FName=fso.buildpath(DeskFldr.self.path, "Folder Property List.txt")
Set ts = fso.OpenTextFile(FName, 8, vbtrue)
For x = 0 to 50
t1 = t1 & Fldr.GetDetailsOf(vbnull, x) & " (Shell)" & vbtab
Next
ts.write FLDR.self.path &vbcrlf
ts.Write T1 & vbcrlf
T1=""
For Each FldrItem in FldrItems
For x = 0 to 50
t1 = t1 & Fldr.GetDetailsOf(FldrItem, x) & vbtab
Next
t1=t1 & vbcrlf
ts.Write T1
T1=""
Next
'msgbox FName & "has a tab delimited list of all properties"
上記にフォルダーをドロップすると、フォルダー内のファイルのすべてのシェル プロパティのリストが生成されます。mp3 ファイルがありません。何が起こるかは、インストールしたソフトウェアによって異なります。Wma ファイルはデュレーションを空白のままにします。プロパティは、Windows のバージョンごとに劇的に変化します。
最初のループは (folderitem に null を渡すことによって) 利用可能なプロパティを取得し、2 番目のループは各 folderitem のプロパティを取得します。