[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 批处理怎样把文件夹中的wav文件逐条列举出来并进行格式转换?

现有一块硬盘挂载为E盘,硬盘各个子文件夹里面全是wav格式的音频文件,E盘上面存放录音的目录格式如下:
E:\年份\月份\日期\四位数的号码\录音(例如E:\2012\01\20\1001\录音文件)
需要把这些文件全部转换为mp3格式并放到D盘,目录保持不变,我用ffmpeg软件进行逐条转换,转换语句没有问题,但是在列出硬盘中的文件时候出现问题,批处理运行后显示报错为“系统找不到文件 dir”,我初步估计是在列举文件上面出现问题。
批处理如下,烦请大家帮我找一下原因:
  1. @echo off
  2. set SRCPATH=E:\
  3. set BACKUPPATH=D:\
  4. for /f %%a in (dir /b %SRCPATH%) do (echo 转换文件: %%a
  5. "C:\Program Files\ffmpeg\bin\ffmpeg.exe" -i %SPRCPATH%\%%a -ab 32k -ar 8000 /BACKUPPATH%\%%a.mp3
  6. )
  7. pause
复制代码

  1. @echo off
  2. set SRCPATH=E:\
  3. set BACKUPPATH=D:\
  4. for /f %%a in ('dir /b %SRCPATH%') do (echo 转换文件: %%a
  5. "C:\Program Files\ffmpeg\bin\ffmpeg.exe" -i %SPRCPATH%\%%a -ab 32k -ar 8000 /BACKUPPATH%\%%a.mp3
  6. )
复制代码
FOR语句中第一个括号要是作为命令行来解析,要加‘’
具体请看论坛FOR从入门到精通,每个页面的最上方都有

TOP

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

TOP

本帖最后由 Bearxy 于 2012-9-12 14:17 编辑

回复 3# 2012ssdos
  1. @echo off
  2. set SRCPATH=E:\
  3. set BACKUPPATH=D:\
  4. set "file=C:\Program Files\ffmpeg\bin\ffmpeg.exe"
  5. for /f "delims=" %%a in ('dir /b %SRCPATH%') do (
  6.   echo 转换文件: %%a
  7.   %file% -i %%a -ab 32k -ar 8000 %BACKUPPATH%\%%a.mp3
  8. )
复制代码
我没有你转换的这个命令行工具,只是按照我的理解修改了一下。
最后一句语句中的%%a本身就是代表了你DIR出来的变量,所以不用在前面加%SRCPATH%
你测试一下,还有 /BACKUPPATH%\%%a.mp3 这句里面你第一个/是什么意思?应该是%BACKUPPATH%吧?
1

评分人数

TOP

回复  2012ssdos 我没有你转换的这个命令行工具,只是按照我的理解修改了一下。
最后一句语句中的%%a本身就 ...
Bearxy 发表于 2012-9-12 14:06



    谢谢@Bearxy大牛,已经可以转换了,ffmpeg这个程序不能写成变量,刚才测试的时候写成变量形式后面跟的参数就不能执行了。只是还有一个小问题,我必须把路径写到文件所在的文件夹才可以进行转换,例如E:\2012\01\20\1001\录音文件,这个我必须把路径变量写成
set SRCPATH=E:\2012\01\20\1001\
有没有方法可以把路径写盘符就行了,因为一天里面有好几千个子文件夹来存放录音

TOP

本帖最后由 Bearxy 于 2012-9-12 14:58 编辑

回复 5# 2012ssdos
  1. @echo off
  2. set "file2=D:\"
  3. rem 转换完成后的目录
  4. set "file=c:\ffmpeg.exe"
  5. rem 转换工具所在目录(可以使用变量,我测试过了)
  6. for /f "delims=" %%a in ('dir /s/b "%1"') do (
  7. echo.%%a
  8. echo.Y|%file% -i "%%a" -ab 32k -ar 8000 "%file2%%%~na.Mp3"
  9. )
  10. cls&echo.________________转换完成!
  11. pause>nul
复制代码
我下载工具测试了,没有问题,因为你说的我有点理解不清楚,如果你想修改的更好,就要把文件夹的规律告诉大家,才能给你想办法。
给你做了个傻瓜化的,直接把你要处理的文件夹拖到批处理图标上就行了。

TOP

回复  2012ssdos 我下载工具测试了,没有问题,因为你说的我有点理解不清楚,如果你想修改的更好,就要把文 ...
Bearxy 发表于 2012-9-12 14:53



    好的,谢谢,用你这个我这边测试了也可以,我刚才没有测试成功可能是我的变量写的有问题,再次感谢

TOP

本帖最后由 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月份的全部录音。

TOP

回复 8# 2012ssdos

哎呀,抱歉,我前面没注意到,你要回我的帖子就点我回帖的那个下边的回复,要不然我收不到消息的。
要下班了,你加我扣吧,3156 零一九六三

TOP

回复 9# Bearxy


    加好了

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. set "file=D:\"
  3. set "file1=c:\ffmpeg.exe"
  4. xcopy  /s/t/y "%1" "!file!2012\"
  5. for /f "delims=" %%a in ('dir /s/b/a-d "%1"') do (
  6. echo.正在转换的文件:%%a
  7. set str=%%a
  8. set var=!str:*\=!
  9. set num=!var:.wav=!
  10. echo.转换后的文件:!file!!num!.mp3
  11. echo.Y|!file1! -i "%%a" -ab 32k -ar 8000 "!file!!num!.mp3"
  12. )
  13. cls&echo.________________转换完成!
  14. pause>nul
复制代码

TOP

返回列表