标题: [文件操作] 批处理怎样把文件夹中的wav文件逐条列举出来并进行格式转换? [打印本页]
作者: 2012ssdos 时间: 2012-9-12 13:19 标题: 批处理怎样把文件夹中的wav文件逐条列举出来并进行格式转换?
现有一块硬盘挂载为E盘,硬盘各个子文件夹里面全是wav格式的音频文件,E盘上面存放录音的目录格式如下:
E:\年份\月份\日期\四位数的号码\录音(例如E:\2012\01\20\1001\录音文件)
需要把这些文件全部转换为mp3格式并放到D盘,目录保持不变,我用ffmpeg软件进行逐条转换,转换语句没有问题,但是在列出硬盘中的文件时候出现问题,批处理运行后显示报错为“系统找不到文件 dir”,我初步估计是在列举文件上面出现问题。
批处理如下,烦请大家帮我找一下原因:- @echo off
- set SRCPATH=E:\
- set BACKUPPATH=D:\
- for /f %%a in (dir /b %SRCPATH%) do (echo 转换文件: %%a
- "C:\Program Files\ffmpeg\bin\ffmpeg.exe" -i %SPRCPATH%\%%a -ab 32k -ar 8000 /BACKUPPATH%\%%a.mp3
- )
- pause
复制代码
作者: Bearxy 时间: 2012-9-12 13:40
- @echo off
- set SRCPATH=E:\
- set BACKUPPATH=D:\
- for /f %%a in ('dir /b %SRCPATH%') do (echo 转换文件: %%a
- "C:\Program Files\ffmpeg\bin\ffmpeg.exe" -i %SPRCPATH%\%%a -ab 32k -ar 8000 /BACKUPPATH%\%%a.mp3
- )
复制代码
FOR语句中第一个括号要是作为命令行来解析,要加‘’
具体请看论坛FOR从入门到精通,每个页面的最上方都有
作者: 2012ssdos 时间: 2012-9-12 13:53
FOR语句中第一个括号要是作为命令行来解析,要加‘’
具体请看论坛FOR从入门到精通,每个页面的最上方都有
Bearxy 发表于 2012-9-12 13:40
@Bearxy,谢谢提醒,不过我加了‘’后下面这条转换语句还是无法执行,是不是我在变量上面出现问题了?
"C:\Program Files\ffmpeg\bin\ffmpeg.exe" -i %SPRCPATH%\%%a -ab 32k -ar 8000 /BACKUPPATH%\%%a.mp3
作者: Bearxy 时间: 2012-9-12 14:06
本帖最后由 Bearxy 于 2012-9-12 14:17 编辑
回复 3# 2012ssdos - @echo off
- set SRCPATH=E:\
- set BACKUPPATH=D:\
- set "file=C:\Program Files\ffmpeg\bin\ffmpeg.exe"
- for /f "delims=" %%a in ('dir /b %SRCPATH%') do (
- echo 转换文件: %%a
- %file% -i %%a -ab 32k -ar 8000 %BACKUPPATH%\%%a.mp3
- )
复制代码
我没有你转换的这个命令行工具,只是按照我的理解修改了一下。
最后一句语句中的%%a本身就是代表了你DIR出来的变量,所以不用在前面加%SRCPATH%
你测试一下,还有 /BACKUPPATH%\%%a.mp3 这句里面你第一个/是什么意思?应该是%BACKUPPATH%吧?
作者: 2012ssdos 时间: 2012-9-12 14:27
回复 2012ssdos 我没有你转换的这个命令行工具,只是按照我的理解修改了一下。
最后一句语句中的%%a本身就 ...
Bearxy 发表于 2012-9-12 14:06
谢谢@Bearxy大牛,已经可以转换了,ffmpeg这个程序不能写成变量,刚才测试的时候写成变量形式后面跟的参数就不能执行了。只是还有一个小问题,我必须把路径写到文件所在的文件夹才可以进行转换,例如E:\2012\01\20\1001\录音文件,这个我必须把路径变量写成
set SRCPATH=E:\2012\01\20\1001\
有没有方法可以把路径写盘符就行了,因为一天里面有好几千个子文件夹来存放录音
作者: Bearxy 时间: 2012-9-12 14:53
本帖最后由 Bearxy 于 2012-9-12 14:58 编辑
回复 5# 2012ssdos - @echo off
- set "file2=D:\"
- rem 转换完成后的目录
- set "file=c:\ffmpeg.exe"
- rem 转换工具所在目录(可以使用变量,我测试过了)
- for /f "delims=" %%a in ('dir /s/b "%1"') do (
- echo.%%a
- echo.Y|%file% -i "%%a" -ab 32k -ar 8000 "%file2%%%~na.Mp3"
- )
- cls&echo.________________转换完成!
- pause>nul
复制代码
我下载工具测试了,没有问题,因为你说的我有点理解不清楚,如果你想修改的更好,就要把文件夹的规律告诉大家,才能给你想办法。
给你做了个傻瓜化的,直接把你要处理的文件夹拖到批处理图标上就行了。
作者: 2012ssdos 时间: 2012-9-12 15:02
回复 2012ssdos 我下载工具测试了,没有问题,因为你说的我有点理解不清楚,如果你想修改的更好,就要把文 ...
Bearxy 发表于 2012-9-12 14:53
好的,谢谢,用你这个我这边测试了也可以,我刚才没有测试成功可能是我的变量写的有问题,再次感谢
作者: 2012ssdos 时间: 2012-9-12 15:19
本帖最后由 2012ssdos 于 2012-9-12 15:24 编辑
是这样的,一块2TB的硬盘上面都是是wav格式的录音文件,但是文件是按照“年份\月份\日期\编号\录音文件”这样的路径来存放,一年有12个月,在E盘里面就有12个以月份命名的文件夹,然后根据每月有几天就有几个文件夹从01到31不等,然后在以天数命名的文件夹中又会以编号来命名文件夹,编号从1001到3000不等,编号里面才是放的录音文件(例如在E:\2012\01\01\1001\目录下有一百多条录音,在E:\2012\01\01\1002\目录下也有录音),现在需要把这些录音文件全部转换成mp3格式存放在另外一块硬盘上面,刚才在你的帮助下转换工作完成了。但是刚才的批处理必须进入到每个存放录音的目录下才可以转换,我想能不能实现这样的效果:源文件和转换后的文件的存放目录保持不变,假如我要转换1月份的全部录音,我就把录音路径写到E:\2012\01\ 就可以转换1月份的全部录音。
作者: Bearxy 时间: 2012-9-12 17:57
回复 8# 2012ssdos
哎呀,抱歉,我前面没注意到,你要回我的帖子就点我回帖的那个下边的回复,要不然我收不到消息的。
要下班了,你加我扣吧,3156 零一九六三
作者: 2012ssdos 时间: 2012-9-12 18:04
回复 9# Bearxy
加好了
作者: Bearxy 时间: 2012-9-12 20:54
- @echo off&setlocal enabledelayedexpansion
- set "file=D:\"
- set "file1=c:\ffmpeg.exe"
- xcopy /s/t/y "%1" "!file!2012\"
- for /f "delims=" %%a in ('dir /s/b/a-d "%1"') do (
- echo.正在转换的文件:%%a
- set str=%%a
- set var=!str:*\=!
- set num=!var:.wav=!
- echo.转换后的文件:!file!!num!.mp3
- echo.Y|!file1! -i "%%a" -ab 32k -ar 8000 "!file!!num!.mp3"
- )
- cls&echo.________________转换完成!
- pause>nul
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |