我正在尝试使用sox批量修剪音频文件(wav),首先修剪15秒
当我在一个文件上运行以下内容时,它可以通过创建一个文件' snipped.wav'减去前15秒,在同一个文件夹中
@echo off
cd E:\trim\singlefile
sox original.wav snipped.wav trim 15
但是,当我在多个文件上尝试以下操作(修剪后的已处理文件应移至' trimmed'文件夹)时,它不起作用:
@echo off
cd E:\trim\multiplefiles
mkdir trimmed
FOR %%A IN (%*) DO sox "%%A" "trimmed/%%~nA" trim 15
我想我某处(非常)错了。请建议。
答案 0 :(得分:0)
你正在以错误的方式使用for循环。您必须提供要在括号之间迭代的文件。 %*
实际上意味着“所有论据”。您需要*.wav
(表示当前文件夹中以“.wav”结尾的所有文件)或*
(表示当前文件夹中的所有文件)。
您也可以在双引号内使用%%~A
。它将删除周围的双引号(如果它们已经出现在%%A
中,否则你可能有双引号双引号(例如""this should be one string""
)并且双引号的效果将被撤消。您确定"trimmed\%%~nA"
部分吗?使用~n
,您将省略文件名的扩展名(如果%%A
为original.wav
,则%%~nA
将成为original
)。如果您想要文件名和扩展名,请使用~nx
(请参阅末尾的链接)
这是你应该拥有的循环:
FOR %%A IN (*.wav) DO sox "%%~A" "trimmed\%%~nA" trim 15
如果您确实想要在"trimmed\%%~nA"
部分中添加扩展程序,请将其替换为"trimmed\%%~nxA"