通过子目录将.wav文件批量转换为.mp3文件,然后删除剩余的.wav文件

时间:2016-11-22 17:54:21

标签: batch-file audio

我在一家广播电台工作,我们使用一个名为Skimmer Plus的程序进行音频记录,该程序在我们的父目录中创建多个子目录" Air Check"目录树看起来像这样(降序):

空气检查
     年(所以现在是2016年)
        月(十一月)
             第(22)天

并且.wav文件保存在Day目录中,但是没有文件保存在任何其他目录中,只是在" Day" 。目录

我正在努力的是首先自动将.wav文件转换为.mp3文件。现在我只使用蹩脚的滴管" lamedropXPd3-64.exe",但我也有" lame.exe"已下载并可供使用,如果这样可以更容易。以下是我尝试使用自动转换的代码:

@echo off
PushD for %%i in (*.wav) do "\\wideorbit.byui.edu\d\Radio Productions\Air Check\2016\November\22" -V 6 --vbr-old --resample 22.05 "%%i" "%%~ni.mp3" & PopD
pause

我收到的错误消息是:"文件名,目录名或卷标语法不正确。"

这是我的第一个问题。

第二个问题(删除剩余的.wav文件以节省空间)我在上班的时候离我很近了。这是我的代码:

@echo off
PushD "\\wideorbit.byui.edu\d\Radio Productions\Air Check\2016\November\22" &&(forfiles -m *.wav* -d -0 -c "cmd /c del /s /q @path") & PopD
pause

这可以删除所有文件,但正如您所看到的,它只会影响那一天。我希望它能在这一点上起作用:

@echo off
PushD "\\wideorbit.byui.edu\d\Radio Productions\Air Check\" &&(forfiles -m *.wav* -d -0 -c "cmd /c del /s /q @path") & PopD
pause

但是当我尝试运行它时,我收到以下错误消息: "错误:找不到符合指定搜索条件的文件。"

我可以对代码的两个部分进行哪些更改以使其完全可操作?

(另外,为了方便测试,我将@echo offpause放在那里,当我一起完成最终节目时,我将把它们拿出来。)

谢谢!

4 个答案:

答案 0 :(得分:0)

@echo off
PushD
for %%i in (*.wav) do someexecutablenameherwouldbehelpfulIthink "\\wideorbit.byui.edu\d\Radio Productions\Air Check\2016\November\22" -V 6 --vbr-old --resample 22.05 "%%i" "%%~ni.mp3"
PopD
pause

答案 1 :(得分:0)

为了把你聚在一起的一些不错的技巧,默认情况下,这个批次会扫描.wav文件的当前日期文件夹。但是有可选的命令行参数可以从Base/FullScan或当前/Year/Month向下扫描整个树。

Lame和Del命令只有Echoed,只要两个echo命令保留在倒数第二行。

:: Wav2mpg.cmd
@Echo off & SetLocal EnableExtensions EnableDelayedExpansion
Set Lame="X:\Path\to\your\lame.exe"
Set LameOpts= -V 6 --vbr-old --resample 22.05
Set "Base=\\wideorbit.byui.edu\d\Radio Productions\Air Check"

:: Get current Date
For /f "tokens=1-3 delims=.+-" %%A in (
  'wmic os get LocalDateTime^|findstr ^^[0-9]'
) do Set _DT=%%A
Set "year=%_DT:~0,4%"&Set "Month=%_DT:~4,2%"&Set "Day=%_DT:~6,2%"
:: Strip leading zero from Month, Get Monthname
set /a Mo=100%Month%%%100
For /f "tokens=%Mo%" %%A in (
  'echo/January February March April May June^
   July August September October November December'
) do set MonthName=%%A

If /i "%~1" Equ "/FullScan" Goto :Skipover
If /i "%~1" Equ "/Year"  Set Base=%Base%\%Year%
If /i "%~1" Equ "/Month" Set Base=%Base%\%Year%\%MonthName%
If /i "%~1" Equ "" Set Base=%Base%\%Year%\%MonthName%\%Day%

:skipover
PushD "%Base%" || (Echo couldn't pushd %Base%&Pause&Exit /B 1)
For /f  "delims=" %%A in (
  'Dir /B/S/A-D .\*.wav'
) Do Echo %Lame% %LameOpts% "%%~fA" "%%~dpnA.mp3" && Echo Del "%%~fA"
PopD

答案 2 :(得分:0)

要将目录树中的所有.wav文件转换为.mp3个文件,您可以使用以下代码:

pushd "\\wideorbit.byui.edu\d\Radio Productions\Air Check" || exit /B 1
for /R %%F in ("*.wav") do (
    pushd "%%~dpF" && (
        lame -V 6 --vbr-old --resample 22.05 "%%~nxF" "%%~nF.mp3" && (
            del "%%~nxF"
        )
        popd
    )
)
popd

要转换今天的.wav个文件(或者更准确地说,那些具有今天修改日期的文件,而不检查父目录名称),您可以使用以下代码:

pushd "\\wideorbit.byui.edu\d\Radio Productions\Air Check" || exit /B 1
for /F "delims=" %%F in ('
    forfiles /S /M "*.wav" /D +0 /C "cmd /C echo @path"
') do (
    pushd "%%~dpF" && (
        lame -V 6 --vbr-old --resample 22.05 "%%~nxF" "%%~nF.mp3" && (
            del "%%~nxF"
        )
        popd
    )
)
popd

请注意,对于这两种方法,之后都会删除成功转换的.wav文件。

答案 3 :(得分:-3)

只能推荐" EZ CD音频转换器",使用它多年,非常兴奋,转换(以及在一次运行中删除)。不贵,值得每一分钱。有免费的30天试用版。

对于组织,移动,标记我推荐" mp3tag"。可以批量工作,标记和移动文件。伟大的免费软件,但充分发挥潜力,你必须学习语法。