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

активността

Книга: 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(); >

След преместване на всички файлове на екрана се показва информация за техния брой: