中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 06:15
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]搜索文件并将文件以各自目录的名字重命名
楼 主 [已结]搜索文件并将文件以各自目录的名字重命名 发表于 2008-10-19 17:45 ·  中国 浙江 宁波 联通
初级用户
积分 53
发帖 24
注册 2007-06-15 10:33
UID 91393
性别 男
状态 离线
求助:批处理搜索文件并将文件以各自目录的名字重命名

条件:

有指定的文件夹“A”,而且里面还有N个子文件夹(子文件夹的名字是未知的),每个文件夹里都有文件。


目的:

自动读取每个子文件夹的名称,并且将其目录的文件按此文件夹的名称自动命名。

例如:假设子其中一个文件夹的名称为“B”那么其目录下的“*.txt”自动重命名为:B-001.txt、B-002.txt、B-003.txt ……

………………………… 等等很多文件夹 ………………………………

假设子还有一个文件夹的名称为“F”那么其目录下的“*.jpg”自动重命名为:F-001.jpg、F-002.jpg、F-003.jpg ……

………………………… 等等很多文件夹 ………………………………

★☆★☆★☆★ 注意:假设的文件夹都是未知的 ★☆★☆★☆★

其实我就是将上面的想法改变了一下,不知道是否可行?后缀名文件可以是已知的。


求各位高手出招了!先谢谢啦!!!

[ Last edited by HAT on 2008-10-20 at 12:26 ]
2 发表于 2008-10-19 18:20 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
@echo off
set count=1000
for /f "delims=" %%a in ('dir /s /b /a-d "A"') do (
set /a count+=1
call ren "%%a" "A-%%count:~-3%%.jpg"
)
set count=1000
for /f "delims=" %%a in ('dir /s /b /a-d "B"') do (
set /a count+=1
call ren "%%a" "B-%%count:~-3%%.txt"
)
set count=1000
for /f "delims=" %%a in ('dir /s /b /a-d "C"') do (
set /a count+=1
call ren "%%a" "C-%%count:~-3%%.ddb"
)
set count=1000
for /f "delims=" %%a in ('dir /s /b /a-d "D"') do (
set /a count+=1
call ren "%%a" "D-%%count:~-3%%.dwg"
)
3 发表于 2008-10-19 18:25 ·  中国 广东 广州 电信
初级用户
★★
积分 131
发帖 119
注册 2007-06-12 22:50
UID 91125
性别 男
来自 gz
状态 离线
是这样格式吗

文件夹名-001~n.后缀名
4 Re 4楼 发表于 2008-10-19 19:54 ·  美国 惠普HP
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
能行得通。
只要你在顶楼把问题一次性表述清楚,自然有人贴代码。
5 发表于 2008-10-20 00:16 ·  中国 浙江 宁波 联通
初级用户
积分 53
发帖 24
注册 2007-06-15 10:33
UID 91393
性别 男
状态 离线
HAT兄,用你2楼的P处理有些问题呢!

会有这样的提示:存在一个重名文件,或是找不到文件。

我到目录下去看了,有些文件的名字就没的被修改,但是再运行一次P处理有时又会OK了,但有时也还是会不行!这是为何???

不是文件名会全部被重新修改了,为何会提示文件重名呢?

[ Last edited by stoneyu on 2008-10-20 at 00:19 ]
6 Re 5楼 发表于 2008-10-20 00:53 ·  中国 重庆 九龙坡区 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
把重命名之前的文件名列表贴出来看看;把那些重命名失败的文件名列表贴出来看看。
仅凭一个“不行”,我无法猜到问题出在哪里。
7 发表于 2008-10-20 11:44 ·  中国 浙江 宁波 联通
初级用户
积分 53
发帖 24
注册 2007-06-15 10:33
UID 91393
性别 男
状态 离线
这是“☆刁馋★”兄写的代码,基本能实现所说的功能了,在这里贴出来,给有同样需要的朋友参考,谢谢“HAT” 兄和“☆刁馋★”兄!!!

只是这个代码不能按指定的后缀名去重命名,而是将文件夹下所有文件重新命名了,如果能按指定文件重命名就好了。


@echo off
rem 不要把我放在A文件夹下
setlocal EnableDelayedExpansion
set n=1000
for /r "C:\Documents and Settings\Administrator\My Documents\A" %%a in (*) do (
call :GetParent "%%~dpa"
if "!Prev!"=="%%~dpa" (
set /a n+=1
ren "%%a" "!parent!-!n:~1!%%~xa"
) else (
set n=1001
ren "%%a" "!parent!-!n:~1!%%~xa"
)
set Prev=%%~dpa
)
echo.&pause&goto :eof

:GetParent
set parent=%~1
set parent=%parent:~,-1%
set parent2=%parent:*\=%
if "%parent%" neq "%parent2%" call :GetParent "%parent2%\"
goto :eof
论坛跳转: