Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 通过子目录将.wav文件批量转换为.mp3文件,然后删除剩余的.wav文件_Batch File_Audio - Fatal编程技术网

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

Batch file 通过子目录将.wav文件批量转换为.mp3文件,然后删除剩余的.wav文件,batch-file,audio,Batch File,Audio,我在一家电台工作,我们使用一个名为Skimmer Plus的程序记录音频,该程序通过父目录空中检查创建多个子目录,目录树如下所示: 航空检查 所以现在是2016年 十一月 第22天 wav文件保存在Day目录中,但是没有任何文件保存在任何其他目录中,只保存在Day目录中 我正在努力解决的是首先自动将.wav文件转换为.mp3文件。现在我只使用lame dropper lamedropXPd3-64.exe,但我也下载了lame.exe并可供使用,如果这样做会更容易。以下是我尝试自动转换的代码:

我在一家电台工作,我们使用一个名为Skimmer Plus的程序记录音频,该程序通过父目录空中检查创建多个子目录,目录树如下所示:

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

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

我正在努力解决的是首先自动将.wav文件转换为.mp3文件。现在我只使用lame dropper 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并在那里暂停,当我得到最终的程序时,我会将它们取出


谢谢大家!

只能推荐EZ CD音频转换器,使用多年,非常兴奋,可以一次性转换和删除。不贵,物有所值。有30天的免费试用期


对于组织、移动和标记,我建议使用mp3tag。可以批量工作,标记和移动文件。很棒的免费软件,但是为了充分发挥你的潜力,你必须学习语法。

为了收集一些不错的技巧,默认情况下,此批将扫描当前文件夹中的.wav文件。但是有可选的命令行参数可以从Base向下扫描整个树,直到/FullScan或current/Year或/Month

@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
Lame和Del命令只有在两个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
要将目录树中的所有.wav文件转换为.mp3文件,可以使用以下代码:

pushd\\wideorbit.byui.edu\d\Radio Productions\Air Check | |退出/B 1 对于*.wav do中的/R%%F pushd%%~dpF&& lame-V6-vbr旧版-重新采样22.05%~nxF%~nF.mp3&& del%%~nxF 邻苯二胺 邻苯二胺 要转换今天的.wav文件,或者更准确地说,转换修改日期为今天的.wav文件,而不检查父目录名,可以使用以下代码:

pushd\\wideorbit.byui.edu\d\Radio Productions\Air Check | |退出/B 1 对于/F delims=%%F in' forfiles/S/M*.wav/D+0/C cmd/C echo@path ”“是吗 pushd%%~dpF&& lame-V6-vbr旧版-重新采样22.05%~nxF%~nF.mp3&& del%%~nxF 邻苯二胺 邻苯二胺
请注意,对于这两种方法,成功转换的.wav文件都会在之后被删除。

这根本不是问题的答案。他们在批处理文件脚本方面遇到了问题——没有寻找软件推荐。但在我看来,我仍然会陷入同样的境地:必须手动完成所有事情。我工作的地方流动性很大,因为那里是大学校园,所以当我离开时,我只想让它在后台工作。另外,如果我必须买一些东西,我可能就没有预算了。所以这很有帮助,我的可执行文件是lame.exe,我应该说清楚,我的错,我不再收到错误消息了,只是什么都没有发生。如果你回显某个execut。。。然后,您应该得到一个正在生成的任务列表。这些是正确的吗?如果您从提示符执行完全相同的任务,是否会发生某些事情?如果没有,您需要对任务参数进行哪些更改才能使事情发生?当我回显该行时,没有生成任何任务。这是一个很好的问题,我会在继续尝试让它工作时考虑这个问题。这意味着pushd之后的当前目录没有.wav文件。也许用.wav文件推送你的目录会有帮助;在那之后,我将围绕一个循环来处理整个目录树,这是我认为您想要的;最后,我将在转换工具lame之后在循环中插入一个del命令,这样它只有在转换成功的情况下才会执行。我猜lame在出现错误的情况下返回一个非零的退出代码/错误级别……哇……这都是很好的信息,看起来它工作了。我在字里行间停了一下,以便检查回声,然后
输出显示它运行了…但是我转到了物理文件夹,并且.wav文件仍然在文件夹中,即使在.cmd中,输出显示它们被转换为.mp3,然后被删除。然后我再次尝试运行该程序,并收到以下错误消息:找不到文件echo怎么办,您是否删除了它们?如果是的话,mp3是被创造出来的吗?嗯,我是个白痴…我没有拉回声。当我提取回音时,它在今天起作用,但在昨天,我的目录中仍然有.wav文件。因此,它在今天起作用,但没有倒退。我感到很遗憾,我一直在向你寻求帮助,我只是被困住了,你表现得太棒了,非常感谢!我会讨厌android应用程序,因为它不允许发送输入的消息。Well nevermind-为什么不尝试使用cmdline arg/month运行批处理。如果没有更多的wav文件,只需再多花一点时间。HTHSo I删除了这一行:If/I%~1 eq Set Base=%Base%\%Year%\%MonthName%\%Day%,它在前一天起作用。现在,如果我问的是正确的并且很抱歉的话,如果我排除应该扫描整个父目录的if/I%~1 eq/Year Set Base=%Base%\%Year%if/I%~1 eq/Month Set Base=%Base%\%Year%\%MonthName%,那么SEM是一个真正基本的问题,对吗?我想说的是,我希望它在我离开的时候也能工作,我是否需要消除所有这些线路,这样它才能永远工作下去?