Board logo

标题: [已结]搜索文件并将文件以各自目录的名字重命名 [打印本页]

作者: stoneyu     时间: 2008-10-19 17:45    标题: [已结]搜索文件并将文件以各自目录的名字重命名

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

条件:

有指定的文件夹“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 ]
作者: HAT     时间: 2008-10-19 18:20

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

作者: sea1112     时间: 2008-10-19 18:25
是这样格式吗

文件夹名-001~n.后缀名
作者: HAT     时间: 2008-10-19 19:54    标题: Re 4楼

能行得通。
只要你在顶楼把问题一次性表述清楚,自然有人贴代码。
作者: stoneyu     时间: 2008-10-20 00:16
HAT兄,用你2楼的P处理有些问题呢!

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

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

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

[ Last edited by stoneyu on 2008-10-20 at 00:19 ]
作者: HAT     时间: 2008-10-20 00:53    标题: Re 5楼

把重命名之前的文件名列表贴出来看看;把那些重命名失败的文件名列表贴出来看看。
仅凭一个“不行”,我无法猜到问题出在哪里。
作者: stoneyu     时间: 2008-10-20 11:44
这是“☆刁馋★”兄写的代码,基本能实现所说的功能了,在这里贴出来,给有同样需要的朋友参考,谢谢“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