我只是想知道是否有一种方法可以通过 VBScript 在几秒钟内将 mp3 文件的长度转换为变量。
问问题
3671 次
3 回答
7
(改编自我对有关 JScript 的类似问题的回答。)
您可以使用GetDetailsOf
Windows ShellFolder
对象的方法来获取音频文件的长度。此技术支持其元数据可由 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
于 2013-11-07T11:35:11.513 回答
6
使用 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")
于 2013-11-06T12:57:30.050 回答
1
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"
如果您在上面放置一个文件夹,它将为该文件夹中的文件生成所有 shell 属性的列表。我没有任何 mp3 文件。这将取决于您安装的软件会发生什么。Wma 文件将持续时间留空。并且属性从 Windows 版本到版本之间发生了巨大的变化。
第一个循环获取可用的属性(通过为文件夹项传递 null),第二个循环获取每个文件夹项的属性。
于 2013-11-06T12:21:26.853 回答