标题: [文件操作] [已解决]批处理文件改名求优化 [打印本页]
作者: 511182890 时间: 2015-5-6 15:50 标题: [已解决]批处理文件改名求优化
本帖最后由 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
这二个执行不变的
现有的代码是- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s /a-d *.dxf') do (
- for /f "tokens=1-3 delims=()" %%i in ("%%~nxa") do (
- set "a=%%i"
- if "!a:主副背料=-主副背料!" neq "%%i" (
- set "a=!a:主副背料=-主副背料!"
- ) else if "!a:副背料=-副背料!" neq "%%i" (
- set "a=!a:副背料=-副背料!"
- ) else (
- set "a=!a:主料=-主料!"
- set "a=!a:副料=-副料!"
- set "a=!a:背料=-背料!"
- )
- set "b=%%j"
- set "b=!b:米=.!"
- set "c=%%k"
- set "d=!c:~3!"
- set "c=!c:~0,2!"
- ren "%%~dpa%%i(%%j)%%k" "!a!-!c!-!b!.!d!"
- )
- )
- pause
复制代码
作者: cobat 时间: 2015-5-6 16:28
你把改名要求写在帖子里,再把list.txt传上来看看- (@for /r %%a in (*.dxf) do @echo %%~nxa)>list.txt
复制代码
作者: Batcher 时间: 2015-5-6 16:48
- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s /a-d *.dxf') do (
- for /f "tokens=1-2 delims=米" %%i in ("%%~nxa") do (
- :: 长度
- for /f "tokens=1-3 delims=(" %%u in ("%%i") do (
- if "%%w" equ "" (
- set len1=%%v
- ) else (
- set len1=%%w
- )
- )
- for /f "delims=)" %%u in ("%%j") do (
- set len2=%%u
- )
- set len=!len1!.!len2!
-
- :: 材料
- set "material=%%i"
- if "!material:主副背料=-主副背料!" neq "%%i" (
- set "material=!material:主副背料=-主副背料!"
- ) else if "!material:副背料=-副背料!" neq "%%i" (
- set "material=!material:副背料=-副背料!"
- ) else (
- set "material=!material:主料=-主料!"
- set "material=!material:副料=-副料!"
- set "material=!material:背料=-背料!"
- )
- set "material=!material:~0,-2!"
-
- :: 方向
- for /f "tokens=2 delims=)." %%u in ("%%j") do (
- set direction=%%u
- )
-
- :: 后缀
- set "ext=%%j"
- set "ext=!ext:~-3!"
-
- ren "%%a" "!material!-!direction!-!len!.!ext!"
- )
- )
- pause
复制代码
作者: 511182890 时间: 2015-5-6 17:06
回复 3# Batcher
当前目录可以执行了,所有子目录没有运行成功!
作者: Batcher 时间: 2015-5-6 17:11
回复 4# 511182890
代码已更新,你再试试。
作者: 511182890 时间: 2015-5-7 08:19
回复 5# Batcher
执行一次是完成成功的,如果执行二次就把我的文件名全部改成乱的了。
作者: Batcher 时间: 2015-5-7 10:13
回复 6# 511182890
这个问题我已经告诉你如何解决了,为何顶楼要发一个错误的代码呢?
http://www.bathome.net/redirect. ... 5424&pid=167796- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('dir /b /s /a-d *.dxf ^| findstr "米"') do (
- for /f "tokens=1-2 delims=米" %%i in ("%%~nxa") do (
- :: 长度
- for /f "tokens=1-3 delims=(" %%u in ("%%i") do (
- if "%%w" equ "" (
- set len1=%%v
- ) else (
- set len1=%%w
- )
- )
- for /f "delims=)" %%u in ("%%j") do (
- set len2=%%u
- )
- set len=!len1!.!len2!
-
- :: 材料
- set "material=%%i"
- if "!material:主副背料=-主副背料!" neq "%%i" (
- set "material=!material:主副背料=-主副背料!"
- ) else if "!material:副背料=-副背料!" neq "%%i" (
- set "material=!material:副背料=-副背料!"
- ) else (
- set "material=!material:主料=-主料!"
- set "material=!material:副料=-副料!"
- set "material=!material:背料=-背料!"
- )
- set "material=!material:~0,-2!"
-
- :: 方向
- for /f "tokens=2 delims=)." %%u in ("%%j") do (
- set direction=%%u
- )
-
- :: 后缀
- set "ext=%%j"
- set "ext=!ext:~-3!"
-
- ren "%%a" "!material!-!direction!-!len!.!ext!"
- )
- )
- pause
复制代码
作者: 511182890 时间: 2015-5-7 10:54
回复 7# Batcher
你的这个代码,执行之后,文件名是:AA2065-G1101-AA-133主副背料(6米48)倒顺.dxf那是正常的,但如果我的文件名是这样的:ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf是这样的话,会把我的文件名改掉的
他的那个代码,执行之后,只是跳过了我的这个带有“()"的文件,另外都也是正常更改!
作者: Batcher 时间: 2015-5-7 11:48
回复 8# 511182890
我来解释一下吧:
dir /b /s /a-d *.dxf ^| findstr "米" 是用来解决“重复改名”这个问题的
dir /b /s /a-d *.dxf ^| findstr "米" 是用来解决“无法处理子文件夹”这个问题的
现在7楼的代码有什么问题吗?请举例说明
作者: 511182890 时间: 2015-5-7 12:10
回复 9# Batcher
这个文件 ZZ2065(用EE2066)-G1101-AA五四位-136背料(6米48)四向.dxf
运行之后变成:ZZ2065--G-用EE2066.101-AA五四位-136背料
作者: Batcher 时间: 2015-5-7 14:02
回复 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
作者: apang 时间: 2015-5-7 17:47
- @echo off & setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /b /s /a-d *米*.dxf') do (
- set "Name=%%~ni"
- for /f "delims=主副背" %%a in ("!Name!") do (
- for /f "tokens=1-4 delims=(米)" %%b in ("!Name:%%a=!") do (
- ren "%%i" "%%a-%%b-%%e-%%c.%%d%%~xi"
- )
- )
- )
- pause
复制代码
作者: 511182890 时间: 2015-5-8 08:39
回复 7# Batcher
谢谢你,你的代码3楼的执行多次就出错了,7楼的完美执行,谢谢你。
作者: 511182890 时间: 2015-5-8 08:40
回复 12# apang
谢谢你,完美执行。
作者: 511182890 时间: 2015-6-30 15:09
回复 3# Batcher
http://www.bathome.net/viewthread.php?tid=36307&extra=
帮忙改一下。
作者: 511182890 时间: 2015-8-1 13:26
回复 3# Batcher
帮忙看看
http://www.bathome.net/thread-36745-1-1.html
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |