批处理遍历子文件夹和重命名文件

时间:2011-04-30 07:56:06

标签: file batch-file rename directory traversal

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

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

能够回答此问题的人将成为我的英雄! :)
顺便说一下,我使用的是Windows 7.

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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
)