我使用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文件。
由于
答案 0 :(得分:0)
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
个文件列表。此列表将包含最后生成的文件(在有问题的命名之后)作为第一个元素,因此,将删除此第一个元素(set中的最后一个文件)。包括附加检查以确保不删除原始输入文件(以防以前的文件处理没有生成任何aditional文件)。
答案 1 :(得分:0)
setlocal EnableDelayedExpansion
for %%f in (*.wav) do (
sox %%f %%f silence 1 0.1 1%% 1 2.5 1%% : newfile : restart
rem Get the last file with this same name plus three digits:
for %%g in (%%~Nf???.wav) do set "last=%%g"
del "!last!"
)