我正在使用sox http://sox.sourceforge.net/处理Windows批处理脚本,以基于静音将充满波形文件的文件夹拆分为单独的波形文件(每个文件中有多个不同的声音。)
FOR %%f in (*.wav) do (
sox %%f %%f silence 1 0.1 1%% 1 2.5 1%% : newfile : restart)
换句话说,该文件夹包含01.wav,02.wav等,并且sox输出01001.wav 01002.wav,02001.wav,02002.wav等。由于sox如何循环遍历wav文件,我最终得到了一个每个原件的文件都比我应该的多。我想在脚本末尾添加一个循环,该循环确定每个初始两位数字指示符(01、02、03)存在多少个文件,并删除最后一个。
请让我知道是否需要对此进行解释,或者使用其他脚本语言来简化它会更容易。我看到有人在perl中做类似的事情,但我还没有研究过在perl中编辑wav文件。
谢谢
最佳答案
for %%f in (*.wav) do (
sox %%f %%f silence 1 0.1 1%% 1 2.5 1%% : newfile : restart
set "last=1"
for /f "delims=" %%a in ('
dir /a-d /b /o-n "%%~nf*.wav"
') do if defined last if not "%%a"=="%%f" ( set "last=" & del "%%a" )
)
对于每个已处理的输入文件,将按名称降序生成具有相同名称的
.wav
文件列表。该列表将包含最后一个生成的文件(紧跟在命名之后)作为第一个元素,因此,该第一个元素(集合中的最后一个文件)将被删除。包括了附加检查,以确保不删除原始输入文件(以防先前的文件处理未生成任何附加文件)。
关于batch-file - 批处理文件,按编号顺序删除最后一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27540736/