2011-01-21 213 views
0

我有一个包含大量子目录的目录。通过目录递归并根据父目录重命名/附加文件名

MAIN_DIR \

每个子dir是一个 “项目名称”,例如

MAIN_DIR \ BOBEVANS324

MAIN_DIR \ BILLJOHNSON3

每一个 “项目” 文件夹中包含了一些在其子迪尔斯的。假设我一直在寻找“.abc”文件,这些文件在没有查看文件夹结构的情况下都具有没有意义的名称。例如,

MAIN_DIR \ BOBEVANS234 \ SUBDIR \ 3904902490.abc

正如你可以看到“3904902490.abc”不会使目录树的上下文之外任何意义。我想通过在复制文件后将目录名追加到文件名来重命名它。

因此,它会查看MAIN_DIR的所有子文件夹并尝试查找“.abc”文件。当它找到一个时,它将它复制到一个dest目录并重命名为“BOBEVANS234_SUBDIR_3904902490.abc”。

回答

0

你想看看FileSystemObject,尤其是Folder Object和它的SubFoldersName(创建新名称)属性和File Object,它的Move Method(记住,如果你在同一个目录文件移动到一个不同的名称,它将具有与重命名相同的效果)。

要找到要重命名的文件,不幸的是你必须手工查找它们,尽管它很容易在这篇MS KB文章中看到(它是为VB6编写的,但与VBScript非常相似):

0

这里是我用我的剧本我的递归函数,你可以使用它,以及

注意您必须使用递归不RecurseX recursex是使用递归功能。

注意:如果有很多子目录,则递归可能需要一段时间。

递归函数会返回一个包含所有文件夹和EVERY子文件夹的ARRAY

例如:

Dim I, SubDirectories 

SubDirectories=Recurse ("MAIN_DIR") 

For I=0 To UBound (SubDirectories) 

WScript.Echo SubDirectories (I) 

Next 

'########################################## '# # '# Function # '# # '# Recurse Function # '# by Ronnie Matthews # '########################################## '# # '# This will return an array of all # '# Folders and subfolders (every levels) # '# in a directory provided. # '# # '##########################################

Function Recurse (dir) 

    Dim FSO 
    Set FSO = CreateObject("Scripting.Filesystemobject") 


    If Not FSO.FolderExists (dir) Then 

     Recurse=Array (Empty) 
     Exit Function 
    End If 

    Dim RecArr, RecArrID 
    RecArr=Array (dir) 
    RecArrID=1 
    Recurse=RecurseX (dir,RecArr,RecArrID) 
    RecArr=Empty 
    RecArrID=Empty 



End Function 

'DO NOT CALL THIS FUNCTION DIRECTLY. ONLY RECURSE 
Function RecurseX (Dir,RecArr,RecArrID) 



    Dim F,FSO 

    Set FSO = CreateObject("Scripting.Filesystemobject") 

    For Each F In FSO.GetFolder (dir).SubFolders 
     ReDim Preserve RecArr (RecArrID) 
     RecArr (RecArrID)=F.Path 
     RecArrID=RecArrID+1 
     If F.SubFolders.Count>=1 Then 


      RecurseX=RecurseX (F.Path,RecArr,RecArrID) 

     End If 

    Next 

    RecurseX=RecArr 

End Function