batch-file - 批处理文件,按编号顺序删除最后一个文件

标签 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文件。

谢谢

最佳答案

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/

相关文章:

ios - 播放已发送电子邮件的嗖嗖声

batch-file - 在bat文件中给定时间后结束命令

windows - .bat 文件中的 Sed 等价物

if-statement - 批处理 - 用户输入到命令提示符(IF 语句问题)

ios - iTunes 如何解析 m3u 文件

java - Superpowered:将效果应用于音频后,是否可以将输出缓冲区保存到文件中?

android - 如何在Android中动态播放音频文件

python - 将wav转换为mp3时如何使用pysox指定比特率

尝试在另一个目录中运行 Bat 文件时发生 Java IOException

java - 执行jar后继续批处理文件