批处理文件以编号顺序删除最后一个文件

时间:2014-12-18 06:51:34

标签: batch-file audio

我使用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文件。

由于

2 个答案:

答案 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!"
)