标题: [已结]搜索文件并将文件以各自目录的名字重命名
[打印本页]
作者: 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