在子文件夹中使用 sox 批处理 wav 文件

Batch process wav files with sox within subfolders

我有一个批处理脚本文件,可以将现有的 wav 文件转换为 Mono wav 文件,并保存到创建的名为“Mono”的文件夹中

代码

@echo off && cd /d "%~dp0"

2>nul mkdir "Mono"
set "_sox=C:\Program Files (x86)\sox-14-4-2\sox.exe"

for %%i in ("*.wav") do "%_sox%" -S "%%~fi" "Mono\%%~ni.wav" channels 1

我必须将这个 .bat 文件放在我想要转换的文件夹中。我的文件夹结构正在扩展,我必须手动浏览每个文件夹,放置 .bat 文件和 运行 脚本以获取生成的单声道文件。

这是我的文件夹结构的示例:

Main Folder
    |
    |______fold1
    |        |_____file1.wav
    |        |_____file2.wav
    |
    |______fold2
    |        |_____file1.wav
    |        |_____file2.wav
    |
    |______fold3
             |_____file1.wav
             |_____file2.wav

随着文件夹结构的扩展,我想将 .bat 文件放在主文件夹中,运行 脚本,脚本将遍历每个子文件夹,创建“Mono”文件夹在每个子文件夹中,并将转换后的单声道 wav 文件放在那里。这应该是包含转换后的单声道文件的更新文件结构:

Main Folder
    |
    |______fold1
    |        |_____file1.wav
    |        |_____file2.wav
    |        |_____Mono
    |                |______file1.wav
    |                |______file2.wav
    |______fold2
    |        |_____file1.wav
    |        |_____file2.wav
    |        |_____Mono
    |                |______file1.wav
    |                |______file2.wav
    |______fold3
    |        |_____file1.wav
    |        |_____file2.wav
    |        |_____Mono
    |                |______file1.wav
    |                |______file2.wav

请告诉我如何修改 .bat 文件来完成此任务。谢谢!

我会这样做:

@ECHO OFF
SET "_sox=C:\Program Files (x86)\sox-14-4-2\sox.exe"

FOR /F "usebackq delims=" %%A IN (`DIR /B "%~dp0"`) DO (
    MKDIR "%~dp0\%%A\Mono" 2> NUL
    FOR /F "usebackq delims=" %%B IN (`DIR /B "%~dp0\%%A\*.wav"`) DO (
        "%_sox%" -S "%~dp0\%%A\%%B" "%~dp0\%%A\Mono\%%~nB.wav" channels 1
    )
)

DIR /B 列出指定文件夹中的每个文件和文件夹。

对于找到的每个文件夹,它将在其中创建一个 Mono 文件夹,然后 运行 为找到的每个 .wav 文件创建 sox 命令。

希望这对您有所帮助。顺便说一句,喜欢你的名字