【问题标题】:batch command line script for outputting files with same name as input file用于输出与输入文件同名的文件的批处理命令行脚本
【发布时间】:2016-12-07 15:24:03
【问题描述】:

这已经让我发疯了一段时间,我一直无法正确弄清楚。我无法获得循环或一批多个文件来执行命令,然后将它们与输入的文件名一起输出,但略有更改。

这很简单,我知道,但我想不通。

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

以 sox.exe 为例,我想将文件夹中的所有 24 位 FLAC 文件转换为 16 位 wav 文件...单个文件命令是: sox.exe [inputfile] -b 16 [outputfile] rate 44100 抖动 -s

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

我将使用我每次运行的脚本或可以放入名为 convert.bat 的批处理文件中的脚本,然后我可以将一个文件夹或我想要处理的所有文件拖放到其中.

...类似的东西 对于 *.flac 中的 i; sox.exe "$i" -b 16 "$i.wav" 速率 44100 抖动 -s;完成

谢谢

【问题讨论】:

  • 当前的 flac 目录为 for %i in (*.flac) do "X:\path\to\sox.exe" "%i" "X:\destination\%~ni.wav"。只需添加您需要的选项。

标签: loops batch-file cmd


【解决方案1】:

如你所说,一个 for 循环。

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

【讨论】:

    【解决方案2】:

    当您(可能)希望每个输入文件有一个输出文件(而不是为所有数千个输入文件提供一个输出文件)时,您必须为每个输入文件执行您的应用程序。很高兴,cmd 为“对每个文件做同样的事情”提供了一个简单的解决方案:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      相关资源
      最近更新 更多