繁体   English   中英

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

[英]Batch convert .wav files to .mp3 files through sub-directories then delete the remaining .wav files

我在一个广播电台工作,在这里使用称为Skimmer Plus的程序记录日志,该程序从父目录“ Air Check”中创建多个子目录,目录树如下所示(降序):

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

.wav文件保存在Day目录中,但是没有文件保存在其他任何目录中,仅在“ Day”目录中。

我正在努力的工作是首先自动将.wav文件转换为.mp3文件。 现在,我只使用the脚的滴管“ 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 off@echo off并在其中pause以方便进行测试,当我获得最终程序时,我将其删除)。

谢谢!

@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

为了使您得到一些体面的技巧,默认情况下,该批次将在当前文件夹中扫描.wav文件。 但是有一些可选的命令行参数,可以通过/FullScan或当前/Year/MonthBase向下扫描整个树。

瘸腿和德尔命令仅Echoed只要在倒数第二行两个回波命令住宿。

:: 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

要将目录树中的所有.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文件(或更准确地说,是今天修改日期的.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文件都将在之后删除。

只能推荐“ EZ CD音频转换器”,它使用了很多年,非常兴奋,可以进行转换(并且还可以一次删除)。 不贵,值得每一分。 有30天的免费试用期。

对于组织,移动,标记,我建议使用“ mp3tag”。 可以批量工作并标记和移动文件。 很棒的免费软件,但要发挥全部潜能,您必须学习语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM