![]() |
中国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 |