Публикация
Рекурсивный поиск файлов через Scripting.FileSystemObject
8 января 2010 10:32
Предлагаю вашему вниманию функцию для рекурсивного поиска файлов в заданном каталоге по маске. На днях потребовалось решить такую задачу для автоматизированного внесения ссылок на деталь "Файлы". Предлагаемая функция как раз и осуществляет указанный поиск. Возможно также видоизменить её для поиска по размеру файла.
function Main() {
//Пример запуска
var FileSystem = new ActiveXObject('Scripting.FileSystemObject');
try {
var Drive = FileSystem.Drives.Item('D');
} catch (e){
Log.Write(1, 'Диск не найден');
return
}
var RegExpMask = /.*\.avi/igm;//--файлы с расширением .avi
var Folder = Drive.RootFolder;//Можно использовать метод GetFolder('имя папки') для подпапок
SearchFile(Folder, RegExpMask);
}
function SearchFile(Folder, RegExpMask){
//Рекурсивная функция поиска файлов по маске
//поиск файлов в папке Folder
var FilesEnumerator = new Enumerator(Folder.Files);
while (!FilesEnumerator.atEnd()){
var File = FilesEnumerator.item();
var FileName = File.Name;//имя файла
var FilePath = File.Path;//полный путь к файлу
var FileSize = File.Size;//размер файла
RegExpMask.compile(RegExpMask);
var FileByMask = RegExpMask.exec(FileName);
System.ProcessMessages();//--здесь можно двигать бегунок
if (FileByMask){
Log.Write(1, FilePath);//здесь можно выполнять любые действия с найденным файлом
}
FilesEnumerator.moveNext();
}
//поиск в подпапках
var SubFoldersEnumerator = new Enumerator(Folder.SubFolders);
while (!SubFoldersEnumerator.atEnd()){
var Folder = SubFoldersEnumerator.item();
System.ProcessMessages();//--здесь можно двигать бегунок
//Log.Write(1, Folder.Path);//--здесь можно выполнять любые действия с найденной папкой
SearchFile(Folder, RegExpMask);
SubFoldersEnumerator.moveNext();
}
}
//Пример запуска
var FileSystem = new ActiveXObject('Scripting.FileSystemObject');
try {
var Drive = FileSystem.Drives.Item('D');
} catch (e){
Log.Write(1, 'Диск не найден');
return
}
var RegExpMask = /.*\.avi/igm;//--файлы с расширением .avi
var Folder = Drive.RootFolder;//Можно использовать метод GetFolder('имя папки') для подпапок
SearchFile(Folder, RegExpMask);
}
function SearchFile(Folder, RegExpMask){
//Рекурсивная функция поиска файлов по маске
//поиск файлов в папке Folder
var FilesEnumerator = new Enumerator(Folder.Files);
while (!FilesEnumerator.atEnd()){
var File = FilesEnumerator.item();
var FileName = File.Name;//имя файла
var FilePath = File.Path;//полный путь к файлу
var FileSize = File.Size;//размер файла
RegExpMask.compile(RegExpMask);
var FileByMask = RegExpMask.exec(FileName);
System.ProcessMessages();//--здесь можно двигать бегунок
if (FileByMask){
Log.Write(1, FilePath);//здесь можно выполнять любые действия с найденным файлом
}
FilesEnumerator.moveNext();
}
//поиск в подпапках
var SubFoldersEnumerator = new Enumerator(Folder.SubFolders);
while (!SubFoldersEnumerator.atEnd()){
var Folder = SubFoldersEnumerator.item();
System.ProcessMessages();//--здесь можно двигать бегунок
//Log.Write(1, Folder.Path);//--здесь можно выполнять любые действия с найденной папкой
SearchFile(Folder, RegExpMask);
SubFoldersEnumerator.moveNext();
}
}
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать