Board logo

标题: [特效代码] [已解决]批量更改文件名中的部分内容? [打印本页]

作者: bat2010    时间: 2010-5-8 22:51     标题: [已解决]批量更改文件名中的部分内容?

如何将文件:
01.我爱你.mp3
02.祈祷.mp3
12神话.mp3
22.吻别.mp3
... ...

批量更改为:
我爱你.mp3
祈祷.mp3
神话.mp3
吻别.mp3
... ...

谢谢!
作者: hanyeguxing    时间: 2010-5-8 23:04

改名的规则是什么?楼主需要提供这个
作者: bat2010    时间: 2010-5-8 23:15

就是想把名称前面的数字号码、有的还带有 . 号 去掉,全部直接用中文!
作者: sgaizxt001    时间: 2010-5-8 23:16

应该是只留汉字。
如果出现比如:再说1次我爱你.mp3的情况,比如365个祝福等等,楼主考虑一下规则
作者: bat2010    时间: 2010-5-8 23:17

这些部分内容有一些共同之处!
或者说批量去掉文件名中包含
*.  (*为通配符)
的内容!
作者: sgaizxt001    时间: 2010-5-8 23:22

取文件名,如果去掉*.的话你的12神话.mp3这个是去不掉12的。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /s /b /a-d "你的文件夹路径"') do (
  4.   set str=%%~ni
  5.   for %%a in (0 1 2 3 4 5 6 7 8 9 .) do (
  6.    set stt=!str:%%a=!
  7.    ren !str!.mp3 !stt!.mp3
  8.       )
  9. )
  10. endlocal
复制代码
没测试,你备份一下然后看看,不对我继续修改

[ 本帖最后由 sgaizxt001 于 2010-5-8 23:23 编辑 ]
作者: bat2010    时间: 2010-5-8 23:28

原帖由 sgaizxt001 于 2010-5-8 23:22 发表
取文件名,如果去掉*.的话你的12神话.mp3这个是去不掉12的。
@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir /s /b /a-d "你的文件夹路径"') do (
  set str=%%~ni
  for %%a in (0 ...


怎么没有反应?
作者: hanyeguxing    时间: 2010-5-8 23:42

1,批处理与mp3在同一目录
2,如果文件名不符合条件,将不被处理
3,不包括子目录:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (*.mp3) do (call:xing "%%~ni"
  3. ren "%%i" "!ye!.mp3")
  4. exit
  5. :xing
  6. set "ye=%~1"&set han=
  7. :gu
  8. for /l %%j in (0,1,9) do if "!ye:~%han%,1!"=="%%j" set/a han+=1&goto:gu
  9. if not "%han%"=="" set ye=!ye:~%han%!
  10. if "%ye:~0,1%"=="." set ye=%ye:~1%
复制代码
或是
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (*.mp3) do (call:xing "%%~ni"
  3. ren "%%i" "!ye!.mp3")
  4. exit
  5. :xing
  6. set "ye=%~1"&set han=
  7. :gu
  8. for %%j in (0,1,2,3,4,5,6,7,8,9,.) do if "!ye:~%han%,1!"=="%%j" set/a han+=1&goto:gu
  9. if not "%han%"=="" set ye=!ye:~%han%!
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-9 00:05 编辑 ]
作者: sgaizxt001    时间: 2010-5-8 23:47

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (*.mp3) do (
  4.   set str=%%~ni
  5.   set stt=!str:*.=!
  6.   ren %%~nxi !stt!.mp3
  7. )
  8. endlocal
复制代码
如果都是数字.名字.mp3的话

[ 本帖最后由 sgaizxt001 于 2010-5-8 23:48 编辑 ]
作者: bat2010    时间: 2010-5-8 23:56

多谢!成功搞定!
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (*.mp3) do (call:xing "%%~ni"
  3. ren "%%i" "!ye!.mp3")
  4. exit
  5. :xing
  6. set "ye=%~1"&set han=
  7. :gu
  8. for %%j in (0,1,2,3,4,5,6,7,8,9,.) do if "!ye:~%han%,1!"=="%%j" set/a han+=1&goto:gu
  9. if not "%han%"=="" set ye=!ye:~%han%!
复制代码

作者: realchong    时间: 2011-12-13 15:12

有高手能帮忙注释么看不太明白
作者: HAT    时间: 2011-12-13 15:16

回复 11# realchong


哪里不明白?
作者: realchong    时间: 2011-12-13 15:42

想修改下,这个好像只能去掉前面的数字,如果中文后面有数字去不掉,里面好像有个循环吧
作者: HAT    时间: 2011-12-13 17:17

回复 13# realchong


建议整理一下自己的需求,单独发个帖子。
作者: realchong    时间: 2011-12-14 08:00

我就是想搞清楚每条命令的含义,好改出不同的作用,现在我看下来好像是用延迟变量做的,就是不断地取文件名的字符,和0-9匹配去掉,是从第一位开始一直取到不是数字循环就结束了,我想要改一个能去到文件名最后一位




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2