中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]搜索文件并将文件以各自目录的名字重命名
作者:
标题: [已结]搜索文件并将文件以各自目录的名字重命名 上一主题 | 下一主题
stoneyu
初级用户





积分 53
发帖 24
注册 2007-6-15
状态 离线
『楼 主』:  [已结]搜索文件并将文件以各自目录的名字重命名

求助:批处理搜索文件并将文件以各自目录的名字重命名

条件:

有指定的文件夹“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 ]

2008-10-19 17:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 2 楼』:  


@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"
)




2008-10-19 18:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
sea1112
初级用户





积分 131
发帖 119
注册 2007-6-12
来自 gz
状态 离线
『第 3 楼』:  

是这样格式吗

文件夹名-001~n.后缀名

2008-10-19 18:25
查看资料  发送邮件  发短消息 网志  OICQ (24278528)  编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 4 楼』:  Re 4楼

能行得通。
只要你在顶楼把问题一次性表述清楚,自然有人贴代码。



2008-10-19 19:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
stoneyu
初级用户





积分 53
发帖 24
注册 2007-6-15
状态 离线
『第 5 楼』:  

HAT兄,用你2楼的P处理有些问题呢!

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

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

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

[ Last edited by stoneyu on 2008-10-20 at 00:19 ]

2008-10-20 00:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 6 楼』:  Re 5楼

把重命名之前的文件名列表贴出来看看;把那些重命名失败的文件名列表贴出来看看。
仅凭一个“不行”,我无法猜到问题出在哪里。



2008-10-20 00:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
stoneyu
初级用户





积分 53
发帖 24
注册 2007-6-15
状态 离线
『第 7 楼』:  

这是“☆刁馋★”兄写的代码,基本能实现所说的功能了,在这里贴出来,给有同样需要的朋友参考,谢谢“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

2008-10-20 11:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: