我希望使用批处理命令来编辑文件夹中的许多波形文件:获取一个文件并将其重复至最短持续时间超过 4 分钟。
无论什么程序可以做到这一点,只要它是免费的并且可以在 Windows 10 上运行。
无论它是否是命令行都没关系。
SoX 不行,因为我无法计算重复播放所有音频文件(数百个)所需的时间,直到结果超过 4 分钟。
这是可能吗?
答案1
我为你编写了一个 vbscript 的开头,用于.*wav
从此文件夹中获取所有文件持续时间大于或等于 4 秒的文件C:\Windows\Media
如果你想得到大于或等于 4 分钟,只需改变这一行
If Split(oFolder.GetDetailsOf(strFileName,LENGTH),":")(2) >= 4 Then
通过这个
If Split(oFolder.GetDetailsOf(strFileName,LENGTH),":")(1) >= 4 Then
尝试一下并告诉我您想要针对您的情况进行哪些修改:
Const LENGTH = 27
Dim oShell : Set oShell = CreateObject("Shell.Application")
Dim oFolder : Set oFolder = oShell.Namespace("C:\Windows\Media")
DIM oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
For Each strFileName in oFolder.Items
If Lcase(oFSO.GetExtensionName(strFileName.Name)) = Lcase("wav") Then
If Split(oFolder.GetDetailsOf(strFileName,LENGTH),":")(2) >= 4 Then
Msg = Msg & "File name: " &_
oFolder.GetDetailsOf(strFileName,FILE_NAME) &_
vbTab & "Duration : "& oFolder.GetDetailsOf(strFileName,LENGTH) & vbcrlf
End If
End If
Next
wscript.echo Msg
编辑 :批量添加另一段代码来生成上述 vbscript 并将结果放入文本文件中:
@echo off
Title Get Duration from *.wav files using vbscript and Batch
Set "LogFile=%~dp0MusicLength.txt"
Call :Generate_VBS_File
Call :Execute_VBS_File
If exist "%LogFile%" Start "" /MAX "%LogFile%"
pause
EXIT
:: -----------------------------------------------------------------------------
:Generate_VBS_File
>"%tmp%\%~n0.vbs" (
echo Const LENGTH = 27
echo Dim oShell : Set oShell = CreateObject("Shell.Application"^)
echo Dim oFolder : Set oFolder = oShell.Namespace("C:\Windows\Media"^)
echo DIM oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject"^)
echo For Each strFileName in oFolder.Items
echo If Lcase(oFSO.GetExtensionName(strFileName.Name^)^) = Lcase("wav"^) Then
echo If Split(oFolder.GetDetailsOf(strFileName,LENGTH^),":"^)(2^) ^>= 4 Then
echo Msg = Msg ^& "File name: " ^&_
echo oFolder.GetDetailsOf(strFileName,FILE_NAME^) ^&_
echo vbTab ^& "Duration : "^& oFolder.GetDetailsOf(strFileName,LENGTH^) ^& vbcrlf
echo End If
echo End If
echo Next
echo wscript.echo Msg
)
Exit /B
:: -----------------------------------------------------------------------------
:Execute_VBS_File
cscript /nologo "%tmp%\%~n0.vbs">"%LogFile%"
If exist "%LogFile%" Type "%LogFile%"
If Exist "%tmp%\%~n0.vbs" Del "%tmp%\%~n0.vbs"
Exit /B
:: -----------------------------------------------------------------------------