2011-01-21 167 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