我有一堆子目录的目录。
MAIN_DIR \
每个子目录都是“项目名称”,例如
MAIN_DIR \ BOBEVANS324
MAIN_DIR \ BILLJOHNSON3
每个“project”文件夹中都包含一堆子目录。假设我正在寻找“.abc”文件,如果不查看文件夹结构,这些文件的名称都没有意义。例如,
MAIN_DIR \ BOBEVANS234 \ SUBDIR \ 3904902490.abc
正如您所看到的,“3904902490.abc”在目录树的上下文之外没有任何意义。我想通过在复制文件后将目录名称附加到文件名来重命名它。
因此,它会查看MAIN_DIR的所有子文件夹并尝试查找“.abc”文件。当它找到一个时,它会将其复制到dest目录并将其重命名为“BOBEVANS234_SUBDIR_3904902490.abc”。
答案 0 :(得分:0)
您想查看FileSystemObject,尤其是Folder Object,SubFolders和Name(创建新名称)属性和File Object并且它是Move Method(请记住,如果您将文件移动到同一目录中的其他名称,它将具有与重命名相同的效果)。
要找到要重命名的文件,不幸的是你必须手工查找它们,虽然它很容易,因为在这篇MS KB文章中可以看到它(它是为VB6编写的,但它与VBScript非常相似):{ {3}}
答案 1 :(得分:0)
这是我用于脚本的递归函数,你也可以使用它
注意您必须使用Recurse , NOT RecurseX recursex由Recurse Function使用。
注意:如果有很多子目录,那么递归可能需要一段时间。
Recurse功能会返回包含所有文件夹的 ARRAY 和 EVERY 子文件夹。
例如:
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
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