找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 75358|回复: 15

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

[复制链接]
发表于 2015-5-6 15:50:25 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-5-6 16:28:10 | 显示全部楼层
你把改名要求写在帖子里,再把list.txt传上来看看
  1. (@for /r %%a in (*.dxf) do @echo %%~nxa)>list.txt
复制代码

评分

参与人数 1技术 +1 收起 理由
pcl_test + 1 头像很带感

查看全部评分

发表于 2015-5-6 16:48:41 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2015-5-6 17:06:54 | 显示全部楼层
回复 3# Batcher


    当前目录可以执行了,所有子目录没有运行成功!
发表于 2015-5-6 17:11:42 | 显示全部楼层
回复 4# 511182890


    代码已更新,你再试试。
 楼主| 发表于 2015-5-7 08:19:39 | 显示全部楼层
回复 5# Batcher


    执行一次是完成成功的,如果执行二次就把我的文件名全部改成乱的了。
发表于 2015-5-7 10:13:42 | 显示全部楼层
回复 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技术 +1 收起 理由
511182890 + 1 谢谢

查看全部评分

 楼主| 发表于 2015-5-7 10:54:26 | 显示全部楼层
回复 7# Batcher


    你的这个代码,执行之后,文件名是:AA2065-G1101-AA-133主副背料(6米48)倒顺.dxf那是正常的,但如果我的文件名是这样的:ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf是这样的话,会把我的文件名改掉的
他的那个代码,执行之后,只是跳过了我的这个带有“()"的文件,另外都也是正常更改!
发表于 2015-5-7 11:48:04 | 显示全部楼层
回复 8# 511182890


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

现在7楼的代码有什么问题吗?请举例说明
 楼主| 发表于 2015-5-7 12:10:44 | 显示全部楼层
回复 9# Batcher


   这个文件 ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf
运行之后变成:ZZ2065--G-用EE2066.101-AA五四位-136背料
发表于 2015-5-7 14:02:29 | 显示全部楼层
回复 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
发表于 2015-5-7 17:47:17 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2015-5-8 08:39:56 | 显示全部楼层
回复 7# Batcher


    谢谢你,你的代码3楼的执行多次就出错了,7楼的完美执行,谢谢你。
 楼主| 发表于 2015-5-8 08:40:25 | 显示全部楼层
回复 12# apang


    谢谢你,完美执行。
 楼主| 发表于 2015-6-30 15:09:42 | 显示全部楼层
回复 3# Batcher


    http://www.bathome.net/viewthread.php?tid=36307&extra=
帮忙改一下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 21:31 , Processed in 0.023848 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表