Batch file 批处理文件以删除编号顺序中的最后一个文件
我正在编写一个windows批处理脚本,使用sox将一个文件夹中的wave文件拆分为单独的wave文件,每个文件中都有多个不同的声音Batch file 批处理文件以删除编号顺序中的最后一个文件,batch-file,audio,Batch File,Audio,我正在编写一个windows批处理脚本,使用sox将一个文件夹中的wave文件拆分为单独的wave文件,每个文件中都有多个不同的声音 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文件,我最终为每个原
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文件
感谢%%f in*.wav do
sox%%f%%f静音1 0.1 1%%1 2.5 1%%:新文件:重新启动
最后设置为1
对于/f delims=%%a in'
dir/a-d/b/o-n%%~nf*.wav
'如果定义为最后一个,则执行%%a=%%%f设置为最后一个=&del%%a
对于每个已处理的输入文件,将按名称降序生成具有相同名称的.wav文件列表。此列表将包含命名为第一个元素后最后生成的文件,因此,此集合中的第一个元素最后一个文件将被删除。包括传统检查,以确保原始输入文件不会仅在先前的文件处理未生成任何传统文件的情况下被删除
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!"
)