中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 05:28
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » REN同时修改多个子目录下文件名的问题
可打印版本  2,063 / 8
第1楼 firstabc 发表于 2010-05-28 20:14
新手上路 发帖 10 积分 15
REN同时修改多个子目录下文件名的问题
遇到一个问题,我有很多子目录,比如ab001,ab005,ab113...目录,
ab001目录下有ha0001_00_00.txt,
ab005目录下有ha0012_00_00.txt,
ab113目录下有ha0025_00_00.txt,
......
我想实现这个功能,同时把每个目录下的文件变成
ha????_02_00.txt这种格式的,就是说把主文件名最后几位的
_00_00变成_02_00。
我用下面这个命令来修改,没成功,%var:~n,m%加进去好像也不行。
for /f "delims=" %a in ('dir /s /b /a-d D:\DOS\ren\ha????_00_00.txt') do echo ren "%a" "%~na.txt"
求教高手,怎么改啊?或者还有别的什么方法?
第2楼 Hanyeguxing 发表于 2010-05-28 22:14
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
批处理:
第3楼 firstabc 发表于 2010-05-28 23:45
新手上路 发帖 10 积分 15
谢谢2楼的,根据2楼的代码做出dat文件是可以的,我想要不用做成dat文件的,直接粘贴到命令窗口就可以跑出来的代码有没有啊?就是说把2楼的代码改在一排,直接拷贝到dos窗口就可以用的。是不是改改%啊,我试了下,没成功,能不能请2楼再帮个忙改改啊?

[ Last edited by firstabc on 2010-5-28 at 23:58 ]
第4楼 Hanyeguxing 发表于 2010-05-29 01:05
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
批处理里:
cmd或在开始-运行中直接运行:

[ Last edited by Hanyeguxing on 2010-5-30 at 00:46 ]
第5楼 firstabc 发表于 2010-05-29 01:08
新手上路 发帖 10 积分 15
setlocal enabledelayedexpansion&for /f "delims=" %a in ('dir /s /b /a-d D:\DOS\ren\abc\*.txt') do (set a=%~na&set "a=!a:_00_00=_02_00!"&ren "%a" "!a!.txt")

我拷贝这个代码在dos下运行了(xp系统),出来替换成了!a!.txt,是不是!a!不行啊,只能在bat文件里用?


--------------------运行结果1--------------------------------------------
D:\>cd D:\DOS\ren\abc

D:\DOS\ren\abc>for /f "delims=" %a in ('dir /s /b /a-d D:\DOS\ren\abc\*.txt') do
(set a=%~na&set "a=!a:_00_00=_02_00!"&ren "%a" "!a!.txt")

D:\DOS\ren\abc>(set a=ds & set "a=!a:_00_00=_02_00!" & ren "D:\DOS\ren\abc\ds.
txt" "!a!.txt" )

D:\DOS\ren\abc>(set a=h0012_00_00 & set "a=!a:_00_00=_02_00!" & ren "D:\DOS\re
n\abc\ab\h0012_00_00.txt" "!a!.txt" )

D:\DOS\ren\abc>


--------------------运行结果2--------------------------------------------
D:\>cd D:\DOS\ren\abc\

D:\DOS\ren\abc>setlocal enabledelayedexpansion&for /f "delims=" %a in ('dir /s /
b /a-d D:\DOS\ren\abc\*.txt') do (set a=%~na&set "a=!a:_00_00=_02_00!"&ren "%a"
"!a!.txt")

D:\DOS\ren\abc>(set a=!a! & set "a=!a:_00_00=_02_00!" & ren "D:\DOS\ren\abc\!a
!.txt" "!a!.txt" )

D:\DOS\ren\abc>(set a=!a! & set "a=!a:_00_00=_02_00!" & ren "D:\DOS\ren\abc\ab
\!a!.txt" "!a!.txt" )

D:\DOS\ren\abc>

[ Last edited by firstabc on 2010-5-29 at 01:28 ]
第6楼 Hanyeguxing 发表于 2010-05-29 16:59
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
重新运行

[ Last edited by Hanyeguxing on 2010-5-30 at 00:47 ]
第7楼 firstabc 发表于 2010-05-29 20:46
新手上路 发帖 10 积分 15
不要前面的cmd /q /v:on /k 不行吗,直接把以for开头的代码拷贝到黑屏里运行的代码不能实现吗?
第8楼 Hanyeguxing 发表于 2010-05-30 00:54
银牌会员 发帖 897 积分 1,039 来自 在地狱中仰望天堂
不可以!
1,在脚本或批处理文件外使用 setlocal 时,将没有效果。所以在cmd窗口内是不能使用setlocal enabledelayedexpansion来开启变量延迟。
2,因此,就要使用cmd /q /v:on /k 来开启变量延迟,其中/q关闭回显,/v开关变量延迟,/k在这里也可以写成/c。
第9楼 firstabc 发表于 2010-06-01 21:55
新手上路 发帖 10 积分 15
那就用Hanyeguxing的批文件吧,谢谢你了!可以揭贴了。
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023