中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-07-05 16:46
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何给多级目录下的文件批量改名 查看 1,063 回复 10
楼 主 [求助]如何给多级目录下的文件批量改名 发表于 2010-06-20 15:31 ·  中国 广东 深圳 电信
初级用户
积分 21
发帖 21
注册 2010-06-19 17:50
16年会员
UID 169155
性别 男
状态 离线
假设目录树的结构如下
A1{B2; a.txt } A1 B2 C3 D4都是文件夹。
意思是 A1下包含B2和a.txt,B2下包含C3和 b.txt,C3下包含D4和c.txt. D4只包含d.txt.
(这里的B2 C3 D4 a b c 都是未知的有很多很多)

类似a.txt 不用改名
类似b.txt 改成B2-b.txt
类似c.txt 改成C3-c.txt
类似d.txt 改成D4-d.txt

最后将所有文本文件都移动到A1下。
各位帮忙看下

[ Last edited by rockyuan on 2010-6-20 at 16:28 ]
2 [求助]如何在文件名前面加前缀。 发表于 2010-06-20 16:51 ·  中国 广东 深圳 电信
初级用户
积分 21
发帖 21
注册 2010-06-19 17:50
16年会员
UID 169155
性别 男
状态 离线
需要在一批文件夹下面加前缀
如1.txt 改成a_1.txt
2.txt 改成a_2.txt
3 发表于 2010-06-20 17:52 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
移动目录D:\rec下所有子目录中的文件(包括系统或隐藏属性)到D:\rec目录下,并同时改名:
@echo off&setlocal enabledelayedexpansion
set "hanye=D:\rec"
for /F "delims=" %%a in ('dir /s/b/a-d "%hanye%\*.*"') do if /i not "%%~dpa"=="%hanye%\" (
set "guxing=%%~dpa"
for %%b in ("!guxing:~0,-1!") do move "%%a" "%hanye%\%%~nb-%%~nxa"
)


[ Last edited by Hanyeguxing on 2010-6-20 at 17:59 ]
4 发表于 2010-06-20 18:03 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
Originally posted by rockyuan at 2010-6-20 16:51:
需要在一批文件夹下面加前缀
如1.txt 改成a_1.txt
2.txt 改成a_2.txt

已回复:http://www.cn-dos.net/forum/viewthread.php?tid=51677&fpage=1
5 发表于 2010-06-20 18:12 ·  中国 广东 深圳 电信
初级用户
积分 21
发帖 21
注册 2010-06-19 17:50
16年会员
UID 169155
性别 男
状态 离线
非常感谢。但是有点缺陷,如果是B2/C3/D4下的文件 到了A1下 其名称是D4-*txt。 能不能改成B2-C3-D4-*.txt
另外想问个类似的问题。
如问题所说的情况,如果现在不想把文件都移到1级目录,而是移动到2级目录,应该怎么改,移动完成后再将所有3 4级目录删除,该怎么做。(原来是提升N级目录,现在提升N-1级)

[ Last edited by rockyuan on 2010-6-20 at 18:24 ]
6 发表于 2010-06-20 18:24 ·  中国 广东 深圳 电信
初级用户
积分 21
发帖 21
注册 2010-06-19 17:50
16年会员
UID 169155
性别 男
状态 离线
非常感谢
7 发表于 2010-06-20 18:45 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
Originally posted by rockyuan at 2010-6-20 18:12:
非常感谢。但是有点缺陷,如果是B2/C3/D4下的文件 到了A1下 其名称是D4-*txt。 能不能改成B2-C3-D4-*.txt
另外想问个类似的问题。
如问题所说的情况,如果现在不想把文件都移到1级目录,而是移动到2级目录,应该怎么改,移动完成后再将所有3 4级目录删除,该怎么做。(原来是提升N级目录,现在提升N-1级)

1,那么原来N-1下的文件怎么办?
2,你在要求中没这么说,怎么能算缺陷呢?
3,支持:如果是B2/C3/D4下的文件 到了A1下 其名称是D4-*txt。 能不能改成B2-C3-D4-*.txt
@echo off&setlocal enabledelayedexpansion
set "han=D:\rec"
for /F "delims=" %%a in ('dir /s/b/a-d "%han%\*.*"') do if /i not "%%~dpa"=="%han%\" (
set "ye=%%~dpa"&set "ye=!ye:%han%\=!"&set "ye=!ye:\=-!"
move "%%a" "%han%\!ye!%%~nxa"
)


[ Last edited by Hanyeguxing on 2010-6-20 at 18:56 ]
8 发表于 2010-06-20 18:57 ·  中国 广东 深圳 电信
初级用户
积分 21
发帖 21
注册 2010-06-19 17:50
16年会员
UID 169155
性别 男
状态 离线
不是缺陷
我没说清楚,言语上的错误不好意思。。

N-1的不用改的。
就是让很多层次的文件,最后形成一个只有A1{B1;B2;B3....Bn}这样。 并且通过文件名能判断出它原来在什么地方。

[ Last edited by rockyuan on 2010-6-20 at 18:59 ]
9 发表于 2010-06-20 19:02 ·  中国 广东 深圳 电信
初级用户
积分 21
发帖 21
注册 2010-06-19 17:50
16年会员
UID 169155
性别 男
状态 离线
按照你后面给的代码 我好像应该回答是N+1
10 发表于 2010-06-20 19:12 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
Originally posted by rockyuan at 2010-6-20 19:02:
按照你后面给的代码 我好像应该回答是N+1

具体说是哪些目录,我不能在那里乱猜,最好举例说明
11 发表于 2010-06-20 19:57 ·  中国 广东 深圳 电信
初级用户
积分 21
发帖 21
注册 2010-06-19 17:50
16年会员
UID 169155
性别 男
状态 离线
原来的文件
A1
-x1.txt
-B1
-x2.txt
-B2
-x3.txt
-c1
-x4.txt
-c2
-x5.txt
-d1
-x6.txt


现在要转变成这样
A1
-x1.txt
-B1
-x2.txt
-B2
-x3.txt
-c1-x4.txt
-c2-x5.txt
-c2-d1-x6.txt

然后将Cn Dn 这些目录都删除

这样表达行吗

[ Last edited by rockyuan on 2010-6-20 at 20:04 ]
论坛跳转: