Копировать, переносить и удалять файлы и папки мы научились в предыдущей статье, теперь давайте попробуем просматривать содержимое файлов и редактировать их. Областей применения данного умения масса: от редактирования autoexec.bat и config.sys, до проверки значения параметра run в win.ini, от вывода на экран содержимого файла в качестве сообщения до ведения логов работы пользователей и действий скрипта.
Так как файлы у нас относятся к объектам файловой системы, то нам надо в первую очередь инициализировать объект файловой системы, а затем воспользоваться одним из его методов для открытия файла:
//JScript var fso = new ActiveXObject("Scripting.FileSystemObject"); var file = fso.OpenTextFile("C:\\TEST\\test.txt", 2, true); //VBScript Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.OpenTextFile("C:\TEST\test.txt", 2, true)
Итак, OpenTextFile открывает файл, если его нет, то создается новый файл. Из параметров, передаваемых методу, обязательным является только первый — имя файла. Остальные параметры можно не указывать. Вторым параметром устанавливается режим открытия файла. Возможные значения, которые может принять эта переменная, следующие:
1 — файл открывается только для чтения;
2 — файл открывается для записи. Причем, все содержимое файла, которое было до этого, уничтожится;
8 — файл открывается для добавления данных. Все, что вы запишите, будет добавлено в конец файла. Довольно удобно для ведения различных логов.
Третья переменная может принимать значение true или false. Она показывает, создавать ли новый файл, если его до этого не существовало. Если значение равно true, то новый файл будет создан.
Есть еще и четвертый параметр, который указывает кодировку для открытия файла. Его возможные значения:
— 2 — открывается, используя системную кодировку;
— 1 — открывается в кодировке Unicode;
0 — открывается в кодировке ASCII.
Но, просто открыть файл мало, надо туда и записать что-нибудь! Именно для этого служат следующие методы:
Write — записывает данные в файл в одну строку, без перевода курсора;
WriteLine — записывает в файл отдельную строку;
WriteBlankLines — записывает пустую строку (в качестве параметра принимает количество пустых строк, которые надо записать).
Вот небольшой пример их использования:
//JScript fso = new ActiveXObject("Scripting.FileSystemObject"); file = fso.OpenTextFile("c:\\TEST\\test.txt", 2, true); file.Write("Hello, World!"); file.WriteBlankLines(2); file.WriteLine("Hello");
Для чтения данных из файла используются методы:
Read — читает из файла указанное в качестве параметра количество символов;
ReadLine — читает строку из файла;
ReadAll — считывает весь файл;
Skip — пропускает указанное количество символов;
SkipLine — пропускает строку.
Давайте попробуем написать на основе этого один весьма полезный скрипт:
//JScript fso = new ActiveXObject("Scripting.FileSystemObject"); //Откроем файл на чтение //При необходимости поменяйте путь расположения файла file = fso.OpenTextFile("c:\\windows\\win.ini", 1, false); //Предполагаем, что параметр run находится во 2-й строке //поэтому устанавливаем туда курсор, пропустив первую строку file.SkipLine(); //Считываем строку и сравниваем с пустой записью //Если они не совпадают, то бъем тревогу if (file.ReadLine()!="run=") { WScript.Echo("Параметр run не пустой!!!"); } //Это просто для контроля. В реальной работе можно отключить else { WScript.Echo("OK!"); }
Некоторые вирусы и трояны прописывают свой запуск в файле win.ini в параметре run. Этот скрипт проверяет, есть ли там какая-то запись, и если с помощью него что-то запускается, то скрипт об этом честно предупреждает. Конечно, это самый примитивный вариант, можно сделать, чтобы была проверка, действительно ли это параметр run, выводить его содержимое если он не пустой, но в учебных целях такого вполне достаточно. Прописываете его в автозагрузку и можете спать спокойно (только не сильно увлекайтесь «засорением» автозагрузки — хоть и не на много, но загружаться будет медленнее).
При работе с файлами учтите такой момент: если вы открываете файл для записи, то читать из него данные вам не позволят, аналогично и наоборот.
Думаю теперь чтение и запись данных в файл с помощью WSH у вас не вызовет никаких проблем.