中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-12 06:23
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » REN同时修改多个子目录下文件名的问题 查看 2,066 回复 8
楼 主 REN同时修改多个子目录下文件名的问题 发表于 2010-05-28 20:14 ·  中国 山东 济南 联通
新手上路
积分 15
发帖 10
注册 2010-05-27 22:13
16年会员
UID 167756
性别 男
状态 离线
遇到一个问题,我有很多子目录,比如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 发表于 2010-05-28 22:14 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
批处理:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /s /b /a-d D:\DOS\*.txt') do (
set a=%%~na
set "a=!a:_00_00=_02_00!"
ren "%%a" "!a!.txt"
)
3 发表于 2010-05-28 23:45 ·  中国 山东 济南 联通
新手上路
积分 15
发帖 10
注册 2010-05-27 22:13
16年会员
UID 167756
性别 男
状态 离线
谢谢2楼的,根据2楼的代码做出dat文件是可以的,我想要不用做成dat文件的,直接粘贴到命令窗口就可以跑出来的代码有没有啊?就是说把2楼的代码改在一排,直接拷贝到dos窗口就可以用的。是不是改改%啊,我试了下,没成功,能不能请2楼再帮个忙改改啊?

[ Last edited by firstabc on 2010-5-28 at 23:58 ]
4 发表于 2010-05-29 01:05 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
批处理里:
setlocal enabledelayedexpansion&for /f "delims=" %%a in ('dir /s /b /a-d D:\rec\*.txt') do (set a=%%~na&set "a=!a:_00_00=_02_00!"&ren "%%a" "!a!.txt")

cmd或在开始-运行中直接运行:
cmd /q /v:on /k "for /f "delims=" %a in ('dir /s /b /a-d D:\rec\*.txt') do (set a=%~na&set "a=!a:_00_00=_02_00!"&ren "%a" "!a!.txt")"


[ Last edited by Hanyeguxing on 2010-5-30 at 00:46 ]
5 发表于 2010-05-29 01:08 ·  中国 山东 济南 联通
新手上路
积分 15
发帖 10
注册 2010-05-27 22:13
16年会员
UID 167756
性别 男
状态 离线
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 发表于 2010-05-29 16:59 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
重新运行
cmd /q /v:on /k "for /f "delims=" %a in ('dir /s /b /a-d D:\rec\*.txt') do (set a=%~na&set "a=!a:_00_00=_02_00!"&ren "%a" "!a!.txt")"


[ Last edited by Hanyeguxing on 2010-5-30 at 00:47 ]
7 发表于 2010-05-29 20:46 ·  中国 山东 济南 联通
新手上路
积分 15
发帖 10
注册 2010-05-27 22:13
16年会员
UID 167756
性别 男
状态 离线
不要前面的cmd /q /v:on /k 不行吗,直接把以for开头的代码拷贝到黑屏里运行的代码不能实现吗?
8 发表于 2010-05-30 00:54 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
不可以!
1,在脚本或批处理文件外使用 setlocal 时,将没有效果。所以在cmd窗口内是不能使用setlocal enabledelayedexpansion来开启变量延迟。
2,因此,就要使用cmd /q /v:on /k 来开启变量延迟,其中/q关闭回显,/v开关变量延迟,/k在这里也可以写成/c。
9 发表于 2010-06-01 21:55 ·  中国 山东 济南 联通
新手上路
积分 15
发帖 10
注册 2010-05-27 22:13
16年会员
UID 167756
性别 男
状态 离线
那就用Hanyeguxing的批文件吧,谢谢你了!可以揭贴了。
论坛跳转: