Преместване на файлове с регистриране на активността

Книга: Windows Script Host за Windows 2000/XP
Преместване на файлове с регистриране на активността
Преместване на файлове с регистриране на активността
Нека си поставим следната задача. Нека файлове с различни разширения идват от пощенска програма или през локална мрежа в дадена директория на твърд диск (например C:In). Изисква се да изберете от тях всички файлове с дадено разширение (например 003) и да ги прехвърлите в друга директория (например C:Out). В този случай е необходимо да се води дневник на операциите (log-file), в който за всеки прехвърлен файл да се записва следната информация: име на файла, дата и час на създаването му, дата и час на движение на файла. Структурата на лог файла (в нашия случай това е файлът C:Inlog.txt) трябва да бъде както следва:
Име на файл (дата и час на създаване) Дата и час на преместване
34556.003 (10/19/2002 10:45) 10/19/2002 11:02 43432_KL.003 (10/19/2002 10:45) 10/19/2002 11:02 45.003 (10/19/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"; //Път към целевата директория
В променливите Маска иPathLog се записват съответно разширението на файловете, които ще се преместват и пътя до лог файла:
var Mask="003", //Разширение на файл за преместване PathLog="C:Inlog.txt"; //Път до лог файла
Скриптът първо проверява дали изходната директория съществува на диска с помощта на метода FolderExists на FileSystemObject; ако тази директория не съществува, се показва съответното съобщение и изпълнението на скрипта се прекъсва:
//Създаване на FileSystemObject FSO=WScript.CreateObject("Scripting.FileSystemObject"); //Проверка за наличие на изходна директория if (!FSO.FolderExists(Source)) //Показва съобщение за липса на изходна директория WScript.Echo("Изходна директория", Източник, "не съществува."); 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);
Операциите за запис на информация в лог файл и директно прехвърляне на файлове от една директория в друга се изпълняват съответно във функциите WriteLog() и MoveFiles().
var s, ss, s1, d, файл, FLog; WScript.Echo(" "); WScript.Echo("Запис на информация в лог файл. "); //Отваряне на лог файл за добавяне FLog=FSO.OpenTextFile(PathLog, ForAppending, true);
//Преместване до първия елемент от файловата колекция Files.moveFirst(); //Преминаване през всички файлове в колекцията while (!Files.atEnd()) //Извличане на текущия файл от колекцията File=Files.item(); //Преминаване към следващия файл в колекцията Files.moveNext(); >
Ако даден файл трябва да бъде преместен (разширението на този файл е същото като разширението на файловете, които трябва да бъдат преместени), тогава се определят неговото име (свойство Name), дата на създаване (свойство DateCreated) и текуща дата (обект Date) и съответната информация се записва в регистрационния файл:
//Изберете файловото разширение s=FSO.GetExtensionName(File.Name); //Проверете дали разширението на текущия файл //с разширението на файловете за преместване if (s==Mask) //Показване на името на файла на екрана WScript.Echo(" "+File.Name); //Определяне на датата на създаване на файла d=нова дата(File.DateCreated); //Формирайте ss низа за запис в лог файла ss=LFillStr(13,File.Name) s1="("+DateToStr(d)+" "; s1+=TimeToStr(d)+")"; ss+=LFillStr(20,s1); //Определяне на текущата дата d=new Date(); ss+=DateToStr(d); ss+=" "+TimeToStr(d); //Запишете генерирания ред в лог файла FLog.WriteLine(ss); >
Низът, записан в лог файла, се формира в необходимата форма с помощта на помощните функции LFillStr (подравняване на низ вляво в поле с дадена дължина), DateToStr (формиране на низ във формат DD/MM/YYYY от обект Date) и TimeTostr (формиране на низ във формат HH:MM от обект Date).
Във функцията MoveFiles(), както и в WriteLog(), файловете от изходната директория (елементи от колекцията Files) се итерират в цикъл while. Преместване на файловесе извършва чрез последователно прилагане на методите Копиране и Изтриване:
Files.moveFirst(); //Преминаване през всички файлове в колекцията while (!Files.atEnd()) //Извличане на текущия файл от колекцията File=Files.item(); //Изберете файловото разширение s=FSO.GetExtensionName(File.Name); //Проверете дали разширението на текущия файл //с разширението на файловете за преместване if (s==Mask) //Показване на името на файла на екрана WScript.Echo(" "+File.name); //Копирайте файла в целевата директория File.Copy(Dest); //Изтриване на файл File.Delete(); //Увеличаване на брояча за броя преместени файлове Col++; > //Преминаване към следващия файл в колекцията Files.moveNext(); >
След преместване на всички файлове на екрана се показва информация за техния брой: