2011-04-30 167 views
3

我想遍历一个文件夹及其所有子文件夹,保留当前文件的计数器变量并将其重命名为$ counter $ ExistingFileName。
例如批量遍历子文件夹和重命名文件

$count = 1; 
foreach $file in $folder 
{ 
    $file.name = $count + $file.name; 
    $count++; 
} 

能回答这个问题的人将是我的英雄! :)
顺便说一句,我使用的是Windows 7

+1

那么容易吗?我*可以*回答这个问题。 :)但严重的是,新的名称模板到底是什么?它是否像'file.ext' ==>'1file.ext'?或者它应该是'1 $ file.ext'?或者可能是'00001file.ext'? – 2011-04-30 09:51:19

回答

1

好,而你正在琢磨我在我的评论的问题到您的文章(或者可能还在做自己的方式回到这个网站来阅读)这里是我的试验照射:

@ECHO OFF 
SET "rootdir=%~1" 
IF "%rootdir%"=="" SET rootdir=. 
SET cnt=0 
FOR /R "%rootdir%" %%f IN (*) DO (
    SET /A cnt+=1 
    SETLOCAL EnableDelayedExpansion 
    RENAME "%%f" "!cnt!%%~nxf" 
    ENDLOCAL 
) 

这将通过简单地在前面加上自己的名字与编号,像这样重命名文件:

1file.txt 
2program.exe 
... 

如果你愿意,你可以有它是这样的:

00001file.txt 
00002program.exe 

对于您需要进行两处更改上面的脚本(以粗体突出):

@ECHO OFF 
SET "rootdir=%~1" 
IF "%rootdir%"=="" SET rootdir=. 
SET cnt=10000 
FOR /R "%rootdir%" %%f IN (*) DO (
    SET /A cnt+=1 
    SETLOCAL EnableDelayedExpansion 
    RENAME "%%f" "!cnt:~1!%%~nxf" 
    ENDLOCAL 
) 
+0

回答!但是当我将这段代码粘贴到控制台中时,我在FOR后面得到一个语法错误,说“%% f”无法处理 – 2011-04-30 10:26:09

+0

我不知道你明白了你的意思,这应该是一个脚本,保存在扩展名为.bat或.cmd的文本文件中,然后运行脚本。顺便说一下,我忘了补充一点,它也接受一个参数,它将成为从哪里开始遍历的根文件夹。 – 2011-04-30 10:31:17

+0

好的,我把它粘贴到rename.bat。然后从控制台,我打电话rename.bat c:\ test,我也尝试rename.bat“c:\ test”,但得到一个语法错误:( – 2011-04-30 10:44:28

1
SETLOCAL ENABLEDELAYEDEXPANSION 
set count=1 
for /r .\folder %%f IN (*.*) do (
    ren "%%f" "!count!%%~nf%%~xf" 
    set /a count=!count!+1) 
+0

我试图将它粘贴到控制台中,但出现语法错误! :( – 2011-04-30 10:38:07

+0

把它放到一个批处理文件中,然后运行批处理文件,将。\文件夹重命名为你想要处理的HD上的文件夹 – 2011-04-30 10:54:58

+0

所以如果文件夹是c:\ test \ 1,脚本怎么样应该看起来像?我正在搞一些选项,但总是得到语法错误 – 2011-04-30 11:17:21