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

[文件操作] 请各位技术大神进来指教一下,优化代码。

今天在论坛有人发帖,地址:
  1. http://www.bathome.net/thread-18977-1-1.html
复制代码
我试着写了一些代码,他实际的需求是要把2012这个文件夹备份,并把其中的WAV文件转换成MP3
目录结构是这样的

文件夹 PATH 列表
卷序列号为 00000002 E79E:4944
E:\2012
├─04
│  ├─06
│  │  └─1001
│  │          WH-20120806-093833-03916659677-83747-1010.wav
│  │          WH-20120806-093941-013937323418-83747-1010.wav
│  │          WH-20120806-094101-013837341722-83747-1010.wav
│  │          WH-20120806-094130-013837341722-83747-1010.wav
│  │          WH-20120806-094226-015038003165-83747-1010.wav
│  │         
│  ├─07
│  │  └─1002
│  │          WH-20120806-094736-015939158690-83747-1010.wav
│  │          WH-20120806-094816-015939158690-83747-1010.wav
│  │          WH-20120806-094910-037965270288-83747-1010.wav
│  │          WH-20120806-094942-called-83747-1010.wav
│  │         
│  └─08
├─05
└─06

按照“年\月\日\编号”这样的规则,但是实际上可能在“日”的目录下会有很多1001 1002 1003这样的文件夹。

现在需要将.wav文件转换成.mp3,然后备份到D盘,而备份的目录结构要和上图一样,唯一差别就是空文件夹不复制。
然后我想了半天,写了下面的代码,好死不死总算能用,但是心里蛮忐忑,总担心会出问题。所以就想发出来,求论坛大神们优化下,我也好学习学习。呵呵
  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
复制代码
其实最重要的是以前看到论坛的教学贴总不认真,东看一下西看一下。现在发现悲剧了,做个稍微复杂点的,就要东拼西凑……(轻喷^_^)

不是"大神"。。。
1.遇到有空格的文件夹,用"%~1"似乎好些;
2.FOR本身有变量扩展功能,如%%~pa扩展为路径,%%~na扩展为文件名。
  1. @echo off
  2. set "Drv=D:"
  3. set "file=c:\ffmpeg.exe"
  4. xcopy  /s/t/y "%~1" "%Drv%\2012\"
  5. for /f "delims=" %%a in ('dir /s/b/a-d "%~1"') do (
  6.   echo 正在转换的文件:%%a
  7.   echo 转换后的文件:%Drv%%%~pna.mp3
  8.   echo y|%file% -i "%%a" -ab 32k -ar 8000 "%drv%%%~pna.mp3"
  9. )
  10. cls&echo ________________转换完成!
  11. pause
复制代码

TOP

回复 2# apang


%%~pna 扩展到路径和文件名,那为什么前面还需要加上盘符的变量?

TOP

回复 3# Bearxy
  1. for %%a in ("c:\a\b\c\123.txt") do (
  2.   echo %%~da
  3.   echo %%~pa
  4.   echo %%~na
  5.   echo %%~xa
  6. )
  7. pause
复制代码

TOP

回复 4# apang


3Q,这回看明白了。哈哈

TOP

返回列表