Рекурсивный поиск файлов через Scripting.FileSystemObject

Предлагаю вашему вниманию функцию для рекурсивного поиска файлов в заданном каталоге по маске. На днях потребовалось решить такую задачу для автоматизированного внесения ссылок на деталь "Файлы". Предлагаемая функция как раз и осуществляет указанный поиск. Возможно также видоизменить её для поиска по размеру файла.

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();
        }
}

Нравится

Поделиться

0 комментариев
Показать все комментарии