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

[文件操作] [已解决]批处理文件改名求优化

本帖最后由 511182890 于 2015-5-8 08:44 编辑

例:这是我所有的文件命名了。
AA2065-G1101-AA-133主副背料(6米48)倒顺.dxf
BB2065-G1101-AA-136副背料(6米48)四向.dxf
CCC2065-G1101-AA-145主料(6米48)双向.dxf
DD2065-G1101-AA五位-136副料(6米48)四向.dxf
FFF2065-G1101-AA五四位-136背料(6米48)四向.dxf
EE2065(共同EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf
ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf
执行后结果:
AA2065-G1101-AA-133-主副背料-倒顺-6.48.dxf
BB2065-G1101-AA-136-副背料-四向-6.48.dxf
CCC2065-G1101-AA-145-主料-双向-6.48.dxf
DD2065-G1101-AA五位-136-副料-四向-6.48.dxf
FFF2065-G1101-AA五四位-136-背料-四向-6.48.dxf
EE2065(共同EE2066)-G1101-AA五四位-136-背料-四向-6.48.dxf
ZZ2065(用EE2066)-G1101-AA五四位-136-背料-四向-6.48.dxf
现在已有代码执行之后,前面没有括号的已经成功了
就是EE2065(共同EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf
ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf
这二个执行不变的
现有的代码是
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /s /a-d *.dxf') do (
  4.     for /f "tokens=1-3 delims=()" %%i in ("%%~nxa") do (
  5.         set "a=%%i"
  6.         if "!a:主副背料=-主副背料!" neq "%%i" (
  7.             set "a=!a:主副背料=-主副背料!"
  8.         ) else if "!a:副背料=-副背料!" neq "%%i" (
  9.             set "a=!a:副背料=-副背料!"
  10.         ) else (
  11.             set "a=!a:主料=-主料!"
  12.             set "a=!a:副料=-副料!"
  13.             set "a=!a:背料=-背料!"
  14.         )
  15.         set "b=%%j"
  16.         set "b=!b:米=.!"
  17.         set "c=%%k"
  18.         set "d=!c:~3!"
  19.         set "c=!c:~0,2!"
  20.         ren "%%~dpa%%i(%%j)%%k" "!a!-!c!-!b!.!d!"
  21.     )
  22. )
  23. pause
复制代码
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

你把改名要求写在帖子里,再把list.txt传上来看看
  1. (@for /r %%a in (*.dxf) do @echo %%~nxa)>list.txt
复制代码
1

评分人数

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /s /a-d *.dxf') do (
  4.     for /f "tokens=1-2 delims=米" %%i in ("%%~nxa") do (
  5.         :: 长度
  6.         for /f "tokens=1-3 delims=(" %%u in ("%%i") do (
  7.             if "%%w" equ "" (
  8.                 set len1=%%v
  9.             ) else (
  10.                 set len1=%%w
  11.             )
  12.         )
  13.         for /f "delims=)" %%u in ("%%j") do (
  14.             set len2=%%u
  15.         )
  16.         set len=!len1!.!len2!
  17.         
  18.         :: 材料
  19.         set "material=%%i"
  20.         if "!material:主副背料=-主副背料!" neq "%%i" (
  21.             set "material=!material:主副背料=-主副背料!"
  22.         ) else if "!material:副背料=-副背料!" neq "%%i" (
  23.             set "material=!material:副背料=-副背料!"
  24.         ) else (
  25.             set "material=!material:主料=-主料!"
  26.             set "material=!material:副料=-副料!"
  27.             set "material=!material:背料=-背料!"
  28.         )
  29.         set "material=!material:~0,-2!"
  30.         
  31.         :: 方向
  32.         for /f "tokens=2 delims=)." %%u in ("%%j") do (
  33.             set direction=%%u
  34.         )
  35.         
  36.         :: 后缀
  37.         set "ext=%%j"
  38.         set "ext=!ext:~-3!"
  39.         
  40.         ren "%%a" "!material!-!direction!-!len!.!ext!"
  41.     )
  42. )
  43. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 3# Batcher


    当前目录可以执行了,所有子目录没有运行成功!

TOP

回复 4# 511182890


    代码已更新,你再试试。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 5# Batcher


    执行一次是完成成功的,如果执行二次就把我的文件名全部改成乱的了。

TOP

回复 6# 511182890


这个问题我已经告诉你如何解决了,为何顶楼要发一个错误的代码呢?
http://www.bathome.net/redirect. ... 5424&pid=167796
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in ('dir /b /s /a-d *.dxf ^| findstr "米"') do (
  4.     for /f "tokens=1-2 delims=米" %%i in ("%%~nxa") do (
  5.         :: 长度
  6.         for /f "tokens=1-3 delims=(" %%u in ("%%i") do (
  7.             if "%%w" equ "" (
  8.                 set len1=%%v
  9.             ) else (
  10.                 set len1=%%w
  11.             )
  12.         )
  13.         for /f "delims=)" %%u in ("%%j") do (
  14.             set len2=%%u
  15.         )
  16.         set len=!len1!.!len2!
  17.         
  18.         :: 材料
  19.         set "material=%%i"
  20.         if "!material:主副背料=-主副背料!" neq "%%i" (
  21.             set "material=!material:主副背料=-主副背料!"
  22.         ) else if "!material:副背料=-副背料!" neq "%%i" (
  23.             set "material=!material:副背料=-副背料!"
  24.         ) else (
  25.             set "material=!material:主料=-主料!"
  26.             set "material=!material:副料=-副料!"
  27.             set "material=!material:背料=-背料!"
  28.         )
  29.         set "material=!material:~0,-2!"
  30.         
  31.         :: 方向
  32.         for /f "tokens=2 delims=)." %%u in ("%%j") do (
  33.             set direction=%%u
  34.         )
  35.         
  36.         :: 后缀
  37.         set "ext=%%j"
  38.         set "ext=!ext:~-3!"
  39.         
  40.         ren "%%a" "!material!-!direction!-!len!.!ext!"
  41.     )
  42. )
  43. pause
复制代码
1

评分人数

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# Batcher


    你的这个代码,执行之后,文件名是:AA2065-G1101-AA-133主副背料(6米48)倒顺.dxf那是正常的,但如果我的文件名是这样的:ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf是这样的话,会把我的文件名改掉的
他的那个代码,执行之后,只是跳过了我的这个带有“()"的文件,另外都也是正常更改!

TOP

回复 8# 511182890


我来解释一下吧:
dir /b /s /a-d *.dxf ^| findstr "米" 是用来解决“重复改名”这个问题的
dir /b /s /a-d *.dxf ^| findstr "米" 是用来解决“无法处理子文件夹”这个问题的

现在7楼的代码有什么问题吗?请举例说明
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 9# Batcher


   这个文件 ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf
运行之后变成:ZZ2065--G-用EE2066.101-AA五四位-136背料

TOP

回复 10# 511182890


我这里测试没有发现问题,你把 ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf 的完整路径发出来给我看下

C:\Test>dir /b *.dxf
AA2065-G1101-AA-133主副背料(6米48)倒顺.dxf
ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf

C:\Test>test.bat

C:\Test>dir /b *.dxf
AA2065-G1101-AA-133-主副背料-倒顺-6.48.dxf
ZZ2065(用EE2066)-G1101-AA五四位-136-背料-四向-6.48.dxf
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('dir /b /s /a-d *米*.dxf') do (
  3.         set "Name=%%~ni"
  4.         for /f "delims=主副背" %%a in ("!Name!") do (
  5.                 for /f "tokens=1-4 delims=(米)" %%b in ("!Name:%%a=!") do (
  6.                         ren "%%i" "%%a-%%b-%%e-%%c.%%d%%~xi"
  7.                 )
  8.         )
  9. )
  10. pause
复制代码

TOP

回复 7# Batcher


    谢谢你,你的代码3楼的执行多次就出错了,7楼的完美执行,谢谢你。

TOP

回复 12# apang


    谢谢你,完美执行。

TOP

回复 3# Batcher


    http://www.bathome.net/viewthread.php?tid=36307&extra=
帮忙改一下。

TOP

返回列表