Тема: JScript: поиск файлов по расширению
Поиск файлов средствами CMD.
Функция получения списка файлов средствами cmd.exe. От аналогов она отличается скоростью работы при поиске в «большом» количестве файлов.
Directory — обязательный параметр, каталог поиска
Extension — необязательный параметр, расширения разыскиваемых файлов через пробел. По умолчанию "".
Deep — необязательный параметр, флаг учета дочерних директорий
Возвращает список файлов в виде массива.
Функция использует сторонний компонент Steam.Reader от участника форума Xameleon.
Stream.Reader весит 5 кб в архиве. Взять его можно тут.
function GetFileList(Directory, Extension, Deep)
{
var
FSO = WScript.CreateObject("Scripting.FileSystemObject"),
WshShell = WScript.CreateObject("WScript.Shell"),
LastCurrentDirectory = WshShell.CurrentDirectory;
// Проверка необязательных параметров Extension, Deep
!Extension || Extension=="" ? Extension = "": null;
Deep? Deep = "/S": Deep = "";
// Преобразуем исходнный Directory в короткий путь
Directory = FSO.GetFolder(Directory).ShortPath;
var
Result = [],
Command,
TempPath = WshShell.ExpandEnvironmentStrings("%TEMP%")+"\\", // Путь к папке %TEMP%
TempBuffer = TempPath + (new Date()).valueOf().toString().substring(6)+".txt";
// Ведем поиск средствами CMD.
Command = "cmd.exe /c chcp 1251 && cmd.exe /c && dir /B "+Deep+" /A:-D "+ Extension+ " > "+TempBuffer;
// Устанавливаем директорию по умолчанию
WshShell.CurrentDirectory = Directory;
// Запустим CMD, ждем окончание выполнения этого процесса
WshShell.Run(Command, 0, true);
var
Stream = WScript.CreateObject("Stream.Reader"),
blocksize = 64 * 1024,
blocks;
Stream.OpenFile(TempBuffer);
Stream.position = 0;
blocks = Stream.size / blocksize;
for (var i=0; i<blocks; i++)
Result.push(Stream.ReadText(blocksize));
Stream.CloseFile();
FSO.DeleteFile (TempBuffer);
Result = Result.join("").split("\n");
Result.length -= 1;
WshShell.CurrentDirectory = LastCurrentDirectory;
return Result;
}
var
Directory = "C:\\",
FileList = [b]GetFileList[/b](Directory, "*.doc *.avi", true);
// Вывод количества найденных файлов doc[x] и avi
WScript.Echo(["Найдено:", FileList.length, "файлов"].join(" "));