Выполнять прокрутку по каталогам и переименовывать / добавлять имена файлов на основе родительских каталогов - PullRequest
0 голосов
/ 22 января 2011

У меня есть каталог с кучей подкаталогов.

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».

Ответы [ 2 ]

0 голосов
/ 05 июня 2016

Вот моя рекурсивная функция, которую я использую для своих сценариев. Вы также можете использовать ее

ПРИМЕЧАНИЕ Вы должны использовать Recurse , NOT RecurseX recursex используется функцией Recurse.

ПРИМЕЧАНИЕ. Если имеется много подкаталогов, то рекурсия может занять некоторое время.

Функция 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. # '# # '##########################################</p> <pre><code>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

0 голосов
/ 24 января 2011

Вы хотите взглянуть на FileSystemObject , особенно на объект папки и его подпапки и Name (для создания новых имен) и File Object и его Method Move (помните, если вы переместите файл с другим именем в том же каталоге, он будет иметь тот же эффект, что и переименование).

Чтобы найти файлы для переименования, вам, к сожалению, придется искать их вручную, хотя это довольно просто, как можно увидеть в этой статье MS KB (она написана для VB6, но очень похожа на VBScript): КАК: Рекурсивно искать каталоги с помощью FileSystemObject

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...