批处理命令行脚本,用于输出与输入文件同名的文件

时间:2016-12-07 15:24:03

标签: loops batch-file cmd

这让我疯狂了一段时间,我从来没有能够正确地弄明白。我无法获得一个循环或一批多个文件来执行命令,然后使用输入的文件名输出它们但稍微改变了。

我知道这很简单,但我无法理解。

最简单的例子是转换音频文件。我有数百甚至数千,我想同时转换完全相同的方式。

使用sox.exe作为示例我想将文件夹中的所有24位FLAC文件转发为16位wav文件...单个文件命令是: sox.exe [inputfile] -b 16 [outputfile] rate 44100 dither -s

使用* .flac似乎对输入工作正常,但输出似乎永远不能正常工作。有人能告诉我在这种情况下创建循环的正确代码......是使用for / f命令还是类似的东西?

我会选择每次运行的脚本或者我可以放入名为convert.bat的批处理文件的脚本,然后我可以将文件夹或所有文件拖放到我要处理的文件夹上

...类似的东西 因为* .flac; sox.exe“$ i”-b 16“$ i.wav”rate 44100 dither -s;完成

由于

2 个答案:

答案 0 :(得分:0)

如你所说,一个for循环。

for %%i in (*.flac) do (
  converter.exe %%i
)
:: Use %i if you're in Command Prompt.

答案 1 :(得分:0)

因为您(可能)需要每个输入文件一个输出文件(对于所有数千个输入文件而言不是一个输出文件),您必须为每个单个输入文件执行应用程序。很高兴,cmd为&#34提供了一个简单的解决方案;为每个文件执行相同的操作":

for %%A in (*.flac) do (
  sox.exe "%%A" -b 16 "%%~nA.wav" rate 44100 dither -s
)

%%A一次代表一个输入文件。您可以使用修饰符来处理文件名的不同部分(请参阅for /?),例如%%~nA仅为您提供名称(没有驱动器,没有文件夹,没有扩展名)。如果需要,您可以使用带"%%~dA\output folder\%%~nA.wav"的混合字符串(使用与输入文件相同的驱动器号,硬编码的特殊文件夹,输入文件的名称和硬编码扩展名。