Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
/*******************************************************************/
/* РРјСЏ: FindRegExp.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                  */
/* Описание: Поиск файлов, имена которых соответствуют заданному  */
/*          регулярному выражению                                */
/*******************************************************************/
//Объявляем переменные
var WshShell,FSO,Folder,ColFind,RegExp,SFileNames;
//Функция для поиска файлов в заданном каталоге
function FindFilesInFolder(Fold,RegEx) {
 var Files,SName; //Объявляем переменные
 ColFind=0; //Счетчик найденных файлов
 SFileNames=""; //Строка с именами файлов
 //Создаем коллекцию файлов в каталоге Fold
В Files=new Enumerator(Fold.Files);
 //Цикл по всем файлам в коллекции
В while (!Files.atEnd()) {
 //Выделяем имя файла
В SName=Files.item().Name;
 //Проверяем, соответствует ли имя файла регулярному
 //выражению
В if (RegEx.test(SName)) {
  ColFind++; //Увеличиваем счетчик найденных файлов
  //Добавляем имя файла к переменной SFileNames
В В SFileNames+=SName+"n";
В }
 Files.moveNext(); //Переходим к следующему файлу
В }
 SItog="Найдено файлов: "+ColFind;
 //Выводим на экран имена и количество найденных файлов
В WScript.Echo(SFileNames+SItog);
}
/******************* Начало **********************************/
//Создаем объект WshShell
WshShell=WScript.CreateObject("WScript.Shell");
//Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSystemObject");
//Создаем объект Folder для доступа к подкаталогу ForFind
//текущего каталога
Folder = FSO.GetFolder(WshShell.CurrentDirectory+"\ForFind");
//Создаем регулярное выражение (объект RegExp)
RegExp=new RegExp("^[РџРђР].*.txt$","i");
//Рщем файлы, имена которых соответствуют регулярному
//выражению RegExp в каталоге Folder
FindFilesInFolder(Folder,RegExp);
/************* Конец *********************************************/
Перемещение файлов с ведением журнала действий
Поставим перед собой следующую задачу. Пусть в заданный каталог на жестком диске (например, C:In) поступают из почтовой программы или по локальной сети файлы с различными расширениями. Требуется выделить из них все файлы с заданным расширением (например, 003) и перенести их в другой каталог (например, C:Out). При этом необходимо вести журнал операций (log-файл), в который для каждого переносимого файла записывать следующую информацию: имя файла, дату и время его создания, дату и время перемещения файла. Структура log-файла (в нашем случае это файл C:Inlog.txt) должна быть следующей:
РРјСЏ файла (Дата Рё время создания) Дата Рё время перемещения
Например:
34556.003В В В (19/10/2002 10:45) 19/10/2002 11:02
43432_KL.003 (19/10/2002 10:45) 19/10/2002 11:02
45.003В В В В В В (19/10/2002 10:45) 19/10/2002 11:02
В В В В В В В В В В В В В ...
Кроме этого, во время перемещения файлов на экран должна выводиться информация о том, какой именно файл обрабатывается, а после завершения работы сценария нужно напечатать общее количество перемещенных файлов (рис. 5.13).
Р РёСЃ. 5.13. Рнформация Рѕ перемещении файлов
Поставленную задачу выполняет рассматриваемый ниже сценарий MoveLog.js; запускать этот сценарий следует в консольном режиме с помощью cscript.exe.
Пути к каталогу-источнику, в котором первоначально находятся файлы, и к целевому каталогу, в который будут перемещены эти файлы, хранятся соответственно в переменных Source и Dest:
var
 Source="C:\In\", //Путь к каталогу-источнику файлов для перемещения
 Dest="C:\Out\"; //Путь к целевому каталогу
В переменных Mask и PathLog записаны соответственно расширение файлов для перемещения и путь к log-файлу:
var
 Mask="003", //Расширение файлов для перемещения
 PathLog="C:\In\log.txt"; //Путь к log-файлу
Сначала в сценарии с помощью метода FolderExists объекта FileSystemObject проверяется наличие на диске каталога-источника; в случае отсутствия этого каталога выводится соответствующее сообщение и выполнение сценария прерывается:
//Создаем объект FileSystemObject
FSO=WScript.CreateObject("Scripting.FileSystemObject");
//Проверяем наличие каталога-источника
if (!FSO.FolderExists(Source)) {
 //Выводим сообщение об отсутствии каталога-источника
 WScript.Echo("Каталог-источник", Source, "не существует.");
 WScript.Echo("Нажмите Enter...");
В WScript.StdIn.ReadLine();
 //Выходим из сценария
В WScript.Quit();
}
Аналогичным образом проверяется наличие целевого каталога:
//Проверяем наличие целевого каталога
if (!FSO.FolderExists(Dest)) {
 //Выводим сообщение об отсутствии целевого каталога
 WScript.Echo("Целевой каталог", Dest, "не существует.");
В WScript.StdIn.ReadLine();
В WScript.StdIn.ReadLine();
 //Выходим из сценария
В WScript.Quit();
}
После этого создается объект Enumerator (переменная Files) для доступа к коллекции всех файлов в каталоге-источнике:
//Создаем объект Folder для каталога-источника Fold=FSO.GetFolder(Source);
//Создаем объект Enumerator для доступа к коллекции файлов
//в каталоге-источнике
Files=new Enumerator(Fold.Files);