Командная строка и сценарии Windows

Сценарии WSH для доступа к файловой системе. Объектная модель FileSystemObject

Разбить на страницы
Показывать лекцию целиком

Сценарии WSH для доступа к файловой системе. Объектная модель FileSystemObject

Сценарии WSH позволяют получить полный доступ к файловой системе компьютера, в отличие от JScript- или VBScript-сценариев, внедренных в HTML-страницы, где в зависимости от уровня безопасности, который устанавливается в настройках браузера, те или иные операции могут быть запрещены.

Объекты для основных операций с файловой системой

Для работы с файловой системой из сценариев WSH предназначены восемь объектов, главным из которых является FileSystemObject. С помощью методов объекта FileSystemObject можно выполнять следующие основные действия:

  • копировать или перемещать файлы и каталоги;
  • удалять файлы и каталоги;
  • создавать каталоги;
  • создавать или открывать текстовые файлы;
  • создавать объекты Drive, Folder и File для доступа к конкретному диску, каталогу или файлу соответственно.
  • С помощью свойств объектов Drive, Folder и File можно получить детальную информацию о тех элементах файловой системы, с которыми они ассоциированы. Объекты Folder и File также предоставляют методы для манипулирования файлами и каталогами (создание, удаление, копирование, перемещение); эти методы в основном копируют соответствующие методы объекта FileSystemObject.

    Кроме этого имеются три объекта-коллекции: Drives, Folders и Files. Коллекция Drives содержит объекты Drive для всех имеющихся в системе дисков, Folders — объекты Folder для всех подкаталогов заданного каталога, Files — объекты File для всех файлов, находящихся внутри определенного каталога.

    Наконец, из сценария можно читать информацию из текстовых файлов и записывать в них данные. Методы для этого предоставляет объект TextStream.

    В табл. 6.1 кратко описано, какие именно объекты, свойства и методы могут понадобиться для выполнения наиболее часто используемых файловых операций.

    Выполнение основных файловых операций
    ОперацияИспользуемые объекты, свойства и методы
    Получение сведений об определенном диске (тип файловой системы, метка тома, общий объем и количество свободного места и т.д.) Свойства объекта Drive. Сам объект Drive создается с помощью метода GetDrive объекта FileSystemObject
    Получение сведений о заданном каталоге или файле (дата создания или последнего доступа, размер, атрибуты и т.д.) Свойства объектов Folder и File. Сами эти объекты создаются с помощью методов GetFolder и GetFile объекта FileSystemObject
    Проверка существования определенного диска, каталога или файла Методы DriveExists, FolderExists и FileExists объекта FileSystemObject
    Копирование файлов и каталогов Методы CopyFile и CopyFolder объекта FileSystemObject, а также методы File.Copy и Folder.Copy
    Перемещение файлов и каталогов Методы MoveFile и MoveFolder объекта FileSystemObject, или методы File.Move и Folder.Move
    Удаление файлов и каталогов Методы DeleteFile и DeleteFolder объекта FileSystemObject, или методы File.Delete и Folder.Delete
    Создание каталога Методы FileSystemObject.CreateFolder или Folders.Add
    Создание текстового файла Методы FileSystemObject.CreateTextFile или Folder.CreateTextFile
    Получение списка всех доступных дисков Коллекция Drives, содержащаяся в свойстве FileSystemObject.Drives
    Получение списка всех подкаталогов заданного каталога Коллекция Folders, содержащаяся в свойстве Folder.SubFolders
    Получение списка всех файлов заданного каталога Коллекция Files, содержащаяся в свойстве Folder.Files
    Открытие текстового файла для чтения, записи или добавления Методы FileSystemObject.CreateTextFile или File.OpenAsTextStream
    Чтение информации из заданного текстового файла или запись ее в него Методы объекта TextStream

    Примеры сценариев

    Далее приведены простые примеры сценариев, работающих с файловой системой (создание, копирование, удаление файлов и каталогов, чтение и запись строк в текстовом файле и т. д.).

    Получение сведений о диске

    Доступ к свойствам заданного локального или сетевого диска можно получить с помощью объекта Drive, который возвращается методом GetDrive объекта FileSystemObject, а также может быть получен как элемент коллекции Drives.

    В листинге 6.1 приведен сценарий DriveInfo.vbs, который выводит на экран некоторые свойства диска С.

    '*******************************************************************
    ' Имя: DriveInfo.vbs                                               
    ' Язык: VBScript                                                   
    ' Описание: Вывод на экран свойств диска C                       
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,D,TotalSize,FreeSpace,s
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект Drive для диска C
    Set D = FSO.GetDrive("C:")
    s = "Информация о диске C:"  VbCrLf
    'Получаем серийный номер диска
    s = s "Серийный номер: "  D.SerialNumber  VbCrLf
    'Получаем метку тома диска
    s = s  "Метка тома: "  D.VolumeName  VbCrLf
    'Вычисляем общий объем диска в килобайтах
    TotalSize = D.TotalSize/1024
    s = s  "Объем: "  TotalSize  " Kb"  VbCrLf
    'Вычисляем объем свободного пространства диска в килобайтах
    FreeSpace = D.FreeSpace/1024
    s = s  "Свободно: "  FreeSpace  " Kb"  VbCrLf
    'Выводим свойства диска на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Получение сведений о каталоге

    Доступ к свойствам каталога обеспечивает объект Folder. Создать этот объект можно с помощью свойства RootFolder объекта Drive или методов GetFolder, GetParentFolder и GetSpecialFolder объекта FileSystemObject. Также объекты Folder могут быть получены как элементы коллекции Folders.

    В сценарии FolderInfo.vbs на экран выводятся свойства каталога, из которого был запущен сценарий (листинги 6.2).

    '*******************************************************************
    ' Имя: FolderInfo.vbs                                              
    ' Язык: VBScript                                                   
    ' Описание: Вывод на экран даты создания текущего каталога        
    '*******************************************************************
    Dim FSO,WshShell,FoldSize,s  'Объявляем переменные
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    'Определяем каталог, из которого был запущен сценарий
    '(текущий каталог)
    Set Folder = FSO.GetFolder(WshShell.CurrentDirectory)
    'Получаем имя текущего каталога
    s = "Текущий каталог: "  Folder.Name  VbCrLf
    'Получаем дату создания текущего каталога
    s = s  "Дата создания: "  Folder.DateCreated  VbCrLf
    'Вычисляем размер текущего каталога в килобайтах
    FoldSize=Folder.Size/1024
    s = s  "Объем: "  FoldSize  " Kb"  VbCrLf
    'Выводим информацию на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Получение сведений о файле

    Доступ ко всем свойствам файла обеспечивает объект File, создать который можно с помощью коллекции Files или метода GetFile объекта FileSystemObject.

    В листинге 6.3 приведен сценарий FileInfo.vbs, в котором на экран выводятся некоторые свойства файла C:\boot.ini.

    '*******************************************************************
    ' Имя: FileInfo.vbs                                                
    ' Язык: VBScript                                                   
    ' Описание: Вывод на экран некоторых свойств файла                
    '*******************************************************************
    Dim FSO,F,s   'Объявляем переменные
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект File
    Set F = FSO.GetFile("C:\boot.ini")
    
    'Получаем имя файла
    s = "Файл: "  F.Name  VbCrLf
    'Получаем дату создания файла
    s = s  "Дата создания: "  F.DateCreated  VbCrLf
    'Получаем тип файла
    s = s  "Тип: "  F.Type  VbCrLf
    'Выводим информацию на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Проверка существования диска, каталога или файла

    Для проверки существования диска, каталога и файла используются соответственно методы DriveExists, FolderExists и FileExists. В листинге 6.4 приведен сценарий IsExistsFile.vbs, в котором проверяется наличие на диске C файла boot.ini.

    '******************************************************************
    ' Имя: IsExistsFile.vbs                                            
    ' Язык: VBScript                                                   
    ' Описание: Проверка существования файла                          
    '*******************************************************************
    Dim FSO,FileName 'Объявляем переменные
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    
    FileName = "C:\boot.ini"
    if  FSO.FileExists(FileName)  Then
      'Выводим информацию на экран
      WScript.Echo "Файл "  FileName  " существует"
    else
      'Выводим информацию на экран
      WScript.Echo "Файл "  FileName  " не существует" 
    end if
    '*************  Конец *********************************************

    Получение списка всех имеющихся дисков

    Каждому из дисков компьютера (включая подключенные сетевые диски и дисководы со сменными носителями) соответствует элемент коллекции Drives (объект Drive ). Таким образом, для построения списка дисков компьютера нужно в цикле перебрать все элементы коллекции Drives.

    В листинге 6.5 приведен сценарий ListDrives.vbs, в котором на экран выводятся сведения обо всех доступных дисках.

    '*******************************************************************
    ' Имя: ListDrives.vbs                                              
    ' Язык: VBScript                                                   
    ' Описание: Получение списка всех имеющихся дисков                
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,s,ss,Drives,D
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем коллекцию дисков, имеющихся в системе
    Set Drives = FSO.Drives
    s = ""
    
    'Перебираем все диски в коллекции
    For Each D In Drives
      'Получаем букву диска
      s = s  D.DriveLetter
      s = s  " - "
      if (D.DriveType = 3) then  'Проверяем, не является ли диск сетевым
        'Получаем имя сетевого ресурса
        ss = D.ShareName
      else 
        'Диск является локальным
        if (D.IsReady) then  'Проверяем готовность диска
          'Если диск готов, то получаем метку тома для диска
          ss = D.VolumeName
        else
          ss = "Устройство не готово"
        end if  
      s = s  ss  VbCrLf
      end if  
    Next
    
    'Выводим полученные строки на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Получение списка всех подкаталогов заданного каталога

    Для построения списка всех подкаталогов определенного каталога можно воспользоваться коллекцией Folders, которая хранится в свойстве SubFolders соответствующего объекта Folder и содержит объекты Folder для всех подкаталогов.

    В листинге 6.6 приведен сценарий ListSubFold.vbs, в котором на экран выводятся названия всех подкаталогов каталога C:\Program Files.

    '*******************************************************************
    ' Имя: ListSubFold.vbs                                             
    ' Язык: VBScript                                                   
    ' Описание: Получение списка всех подкаталогов заданного каталога 
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,SFold,SubFolders,Folder,s
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Путь к каталогу
    SFold = "C:\Program Files"
    s = "Каталог "  SFold  VbCrLf
    s = s  "Подкаталоги:"  VbCrLf
    'Создаем объект Folder для каталога C:\Program Files
    Set F=FSO.GetFolder(SFold)
    
    'Создаем коллекцию подкаталогов каталога C:\Program Files
    Set SubFolders = F.SubFolders
    
    'Цикл по всем подкаталогам
    For Each Folder In SubFolders
      'Добавляем строку с именем подкаталога
       s = s  Folder  VbCrLf
    Next
    
    'Выводим полученные строки на экран
    WScript.Echo s
    '*************  Конец *********************************************/

    Получение списка всех файлов заданного каталога

    В свойстве Files объекта Folder, соответствующего определенному каталогу, хранится коллекция находящихся в этом каталоге файлов (объектов File ). В листинге 6.7 приведен сценарии ListFiles.vbs, выводящий на экран названия всех файлов, которые содержатся в специальной папке Мои документы.

    '*******************************************************************
    ' Имя: ListFiles.vbs                                               
    ' Язык: VBScript                                                   
    ' Описание: Получение списка всех файлов заданного каталога       
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,File,Files,WshShell,PathList,s
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    'Создаем объект WshSpecialFolders
    Set WshFldrs = WshShell.SpecialFolders
    'Определяем путь к папке Мои документы
    PathList = WshFldrs.item("MyDocuments")  "\"
    'Создаем объект Folder для папки Мои документы
    Set F = FSO.GetFolder(PathList)
    'Создаем коллекцию файлов каталога Мои документы
    Set Files = F.Files
    s = "Файлы из каталога "  PathList  VbCrLf
    'Цикл по всем файлам
    For Each File In Files
      'Добавляем строку с именем файла
      s = s  File.Name  VbCrLf
    Next
    
    'Выводим полученные строки на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Создание каталога

    Создать новый каталог на диске можно либо с помощью метода CreateFolder объекта FileSystemObject, либо с помощью метода Add коллекции Folders. Оба эти метода используются в сценарии MakeFolder.vbs для создания в каталоге C:\Program Files подкаталогов Новая папка и Еще одна новая папка (листинг 6.8).

    '*******************************************************************
    ' Имя: MakeFolder.vbs                                           
    ' Язык: VBScript                                                   
    ' Описание: Создание нового каталога                              
    '*******************************************************************
    'Объявляем переменные
    Dim FSO, F, SubFolders
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем каталог C:\Program Files\Новая папка
    FSO.CreateFolder("C:\Program Files\Новая папка")
    'Создаем объект Folder для каталога C:\Program Files
    Set F = FSO.GetFolder("C:\Program Files")
    'Создаем коллекцию подкаталогов каталога C:\Program Files
    Set SubFolders = F.SubFolders
    'Создаем каталог C:\Program Files\Еще одна новая папка
    SubFolders.Add "Еще одна новая папка"
    '*************  Конец *********************************************

    Создание текстового файла

    Для создания текстового файла используется метод CreateTextFile объекта FileSystemObject, который имеет один обязательный текстовый параметр (путь к создаваемому файлу) и два необязательных логических параметра ( Overwrite и Unicode ).

    Параметр Overwrite имеет значение в том случае, когда создаваемый файл уже существует. Если Overwrite равно True, то такой файл перепишется (старое содержимое будет утеряно), если же в качестве Overwrite указано False, то файл переписываться не будет. Если этот параметр вообще не указан, то существующий файл также не будет переписан.

    Параметр Unicode указывает, в каком формате (ASCII или Unicode) следует создавать файл. Если Unicode равно True, то файл создается в формате Unicode, если же Unicode равно False или этот параметр вообще не указан, то файл создается в режиме ASCII.

    В сценарии CreateTempFile.vbs (листинг 6.9) показано, каким образом можно создать файл со случайно выбранным именем (такие файлы часто используются для записи временных данных).

    '*******************************************************************
    ' Имя: CreateTempFile.vbs                                                
    ' Язык: VBScript                                                   
    ' Описание: Создание временного файла со случайным именем         
    '*******************************************************************
    Dim FSO,FileName,F,s  'Объявляем переменные
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Генерируем случайное имя файла
    FileName = FSO.GetTempName
    'Создаем файл с именем FileName
    Set F = FSO.CreateTextFile(FileName, true) 
    'Закрываем файл
    F.Close
    'Сообщаем о создании файла
    WScript.Echo "Был создан файл "  FileName
    '*************  Конец *********************************************

    Операции чтения и записи строк для текстового файла

    Последовательный (строка за строкой) доступ к текстовому файлу обеспечивает объект TextStream. Методы этого объекта позволяют читать информацию из файла и записывать ее в него. Создается объект TextStream при открытии или создании текстового файла с помощью следующих методов:

  • CreateTextFile объектов FileSystemObject и Folder;
  • OpenTextFile объекта FileSystemObject;
  • OpenAsTextStream объекта File.
  • Перечисленные ранее методы позволяют открывать файл в разных режимах ввода/вывода (за это отвечает параметр Iomode ) с использованием разных форматов (в соответствии со значением параметра Format ) (см. табл. 6.2, 6.3)

    Параметр Iomode
    КонстантаЗначениеОписание
    ForReading 1 Файл открывается только для чтения, записывать информацию в него нельзя
    ForWriting 2 Файл открывается для записи. Если файл с таким именем уже существовал, то при новой записи его содержимое теряется
    ForAppending 8 Файл открывается для добавления. Если файл уже существовал, то информация будет дописываться в конец этого файла
    Параметр Format
    КонстантаЗначениеОписание
    TristateUseDefault -2 Файл открывается в формате, используемом системой по умолчанию
    TristateTrue -1 Файл открывается в формате Unicode
    TristateFalse 0 Файл открывается в формате ASCII

    В листинге 6.10 приведен сценарий TextFile.vbs, в котором создается файл test1.txt и в него записываются строка текста. После этого файл открывается для чтения, строка считывается из него и выводится на экран.

    '*******************************************************************
    ' Имя: TextFile.vbs                                                
    ' Язык: VBScript                                                  
    ' Описание: Запись строк в текстовый файл и чтение из него     
    '*******************************************************************
    Dim FSO,F,TextStream,s  'Объявляем переменные
    ' Инициализируем константы
    Const ForReading = 1, ForWriting = 2, TristateUseDefault = -2
    
    ' Создаем объект FileSystemObject
    Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
    ' Создаем в текущем каталоге файл test1.txt
    FSO.CreateTextFile "test1.txt"
    ' Создаем объект File для файла test1.txt
    set F=FSO.GetFile("test1.txt")
    ' Создаем объект TextStream (файл открывается для записи)
    Set TextStream=F.OpenAsTextStream(ForWriting, TristateUseDefault)
    ' Записываем в файл строку
    TextStream.WriteLine "Это первая строка"
    ' Закрываем файл
    TextStream.Close
    ' Открываем файл для чтения
    Set TextStream=F.OpenAsTextStream(ForReading, TristateUseDefault)
    ' Считываем строку из файла
    s=TextStream.ReadLine
    ' Закрываем файл 
    TextStream.Close
    ' Отображаем строку на экране
    WScript.Echo "Первая строка из файла test1.txt:"  vbCrLf  vbCrLf  s
    '*************  Конец *********************************************

    Копирование и перемещение файлов и каталогов

    Для копирования файлов/каталогов можно применять метод CopyFile/CopyFolder объекта FileSystemObject или метод Copy соответствующего этому файлу/каталогу объекта File/Folder. Перемещаются файлы/каталоги с помощью методов MoveFile/MoveFolder объекта FileSystemObject или метода Move соответствующего этому файлу/каталогу объекта File/Folder.

    Отметим, что при использовании всех этих методов процесс копирования или перемещения прерывается после первой возникшей ошибки. Кроме того, нельзя перемещать файлы и каталоги с одного диска на другой.

    В листингах 6.11 и 6.12 приведен сценарий CopyFile.vbs, иллюстрирующий использование метода Copy. В этом сценарии на диске C создается файл TestFile.txt, который затем копируется на рабочий стол.

    '*******************************************************************
    ' Имя: CopyFile.vbs                                                
    ' Язык: VBScript                                                   
    ' Описание: Создание и копирование файла                          
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,WshShell,WshFldrs,PathCopy
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем файл
    Set F = FSO.CreateTextFile("C:\TestFile.txt", true)
    'Записываем в файл строку
    F.WriteLine "Тестовый файл"
    'Закрываем файл
    F.Close
    
    'Создаем объект WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    'Создаем объект WshSpecialFolders
    Set WshFldrs = WshShell.SpecialFolders
    'Определяем путь к рабочему столу
    PathCopy = WshFldrs.item("Desktop")+"\"
    'Создаем объект File для файла C:\TestFile.txt
    Set F = FSO.GetFile("C:\TestFile.txt")
    'Копируем файл на рабочий стол
    F.Copy PathCopy
    '*************  Конец *********************************************

    Удаление файлов и каталогов

    Для удаления файлов/каталогов можно применять метод DeleteFile/DeleteFolder объекта FileSystemObject или метод Delete соответствующего этому файлу/каталогу объекта File/Folder. Отметим, что при удалении каталога неважно, является ли он пустым или нет — удаление будет произведено в любом случае. Если же заданный для удаления файл/каталог не будет найден, то возникнет ошибка.

    В листинге 6.12 приведен сценарий DeleteFile.vbs, в котором производится удаление предварительно созданного файла C:\TestFile.txt.

    '*******************************************************************
    ' Имя: DeleteFile.vbs
    ' Язык: VBScript                                                   
    ' Описание: Создание и удаление файла                             
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,FileName
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Задаем имя файла
    FileName="C:\TestFile.txt"
    'Создаем файл
    Set F = FSO.CreateTextFile(FileName, true)
    'Записываем в файл строку
    F.WriteLine "Тестовый файл"
    'Закрываем файл
    F.Close
    WScript.Echo "Файл создан"
    FSO.DeleteFile FileName
    WScript.Echo "Файл удален"
    '*************  Конец *********************************************
    Страницы:

    Сценарии WSH для доступа к файловой системе. Объектная модель FileSystemObject

    Сценарии WSH позволяют получить полный доступ к файловой системе компьютера, в отличие от JScript- или VBScript-сценариев, внедренных в HTML-страницы, где в зависимости от уровня безопасности, который устанавливается в настройках браузера, те или иные операции могут быть запрещены.

    Объекты для основных операций с файловой системой

    Для работы с файловой системой из сценариев WSH предназначены восемь объектов, главным из которых является FileSystemObject. С помощью методов объекта FileSystemObject можно выполнять следующие основные действия:

  • копировать или перемещать файлы и каталоги;
  • удалять файлы и каталоги;
  • создавать каталоги;
  • создавать или открывать текстовые файлы;
  • создавать объекты Drive, Folder и File для доступа к конкретному диску, каталогу или файлу соответственно.
  • С помощью свойств объектов Drive, Folder и File можно получить детальную информацию о тех элементах файловой системы, с которыми они ассоциированы. Объекты Folder и File также предоставляют методы для манипулирования файлами и каталогами (создание, удаление, копирование, перемещение); эти методы в основном копируют соответствующие методы объекта FileSystemObject.

    Кроме этого имеются три объекта-коллекции: Drives, Folders и Files. Коллекция Drives содержит объекты Drive для всех имеющихся в системе дисков, Folders — объекты Folder для всех подкаталогов заданного каталога, Files — объекты File для всех файлов, находящихся внутри определенного каталога.

    Наконец, из сценария можно читать информацию из текстовых файлов и записывать в них данные. Методы для этого предоставляет объект TextStream.

    В табл. 6.1 кратко описано, какие именно объекты, свойства и методы могут понадобиться для выполнения наиболее часто используемых файловых операций.

    Выполнение основных файловых операций
    ОперацияИспользуемые объекты, свойства и методы
    Получение сведений об определенном диске (тип файловой системы, метка тома, общий объем и количество свободного места и т.д.) Свойства объекта Drive. Сам объект Drive создается с помощью метода GetDrive объекта FileSystemObject
    Получение сведений о заданном каталоге или файле (дата создания или последнего доступа, размер, атрибуты и т.д.) Свойства объектов Folder и File. Сами эти объекты создаются с помощью методов GetFolder и GetFile объекта FileSystemObject
    Проверка существования определенного диска, каталога или файла Методы DriveExists, FolderExists и FileExists объекта FileSystemObject
    Копирование файлов и каталогов Методы CopyFile и CopyFolder объекта FileSystemObject, а также методы File.Copy и Folder.Copy
    Перемещение файлов и каталогов Методы MoveFile и MoveFolder объекта FileSystemObject, или методы File.Move и Folder.Move
    Удаление файлов и каталогов Методы DeleteFile и DeleteFolder объекта FileSystemObject, или методы File.Delete и Folder.Delete
    Создание каталога Методы FileSystemObject.CreateFolder или Folders.Add
    Создание текстового файла Методы FileSystemObject.CreateTextFile или Folder.CreateTextFile
    Получение списка всех доступных дисков Коллекция Drives, содержащаяся в свойстве FileSystemObject.Drives
    Получение списка всех подкаталогов заданного каталога Коллекция Folders, содержащаяся в свойстве Folder.SubFolders
    Получение списка всех файлов заданного каталога Коллекция Files, содержащаяся в свойстве Folder.Files
    Открытие текстового файла для чтения, записи или добавления Методы FileSystemObject.CreateTextFile или File.OpenAsTextStream
    Чтение информации из заданного текстового файла или запись ее в него Методы объекта TextStream

    Примеры сценариев

    Далее приведены простые примеры сценариев, работающих с файловой системой (создание, копирование, удаление файлов и каталогов, чтение и запись строк в текстовом файле и т. д.).

    Получение сведений о диске

    Доступ к свойствам заданного локального или сетевого диска можно получить с помощью объекта Drive, который возвращается методом GetDrive объекта FileSystemObject, а также может быть получен как элемент коллекции Drives.

    В листинге 6.1 приведен сценарий DriveInfo.vbs, который выводит на экран некоторые свойства диска С.

    '*******************************************************************
    ' Имя: DriveInfo.vbs                                               
    ' Язык: VBScript                                                   
    ' Описание: Вывод на экран свойств диска C                       
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,D,TotalSize,FreeSpace,s
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект Drive для диска C
    Set D = FSO.GetDrive("C:")
    s = "Информация о диске C:"  VbCrLf
    'Получаем серийный номер диска
    s = s "Серийный номер: "  D.SerialNumber  VbCrLf
    'Получаем метку тома диска
    s = s  "Метка тома: "  D.VolumeName  VbCrLf
    'Вычисляем общий объем диска в килобайтах
    TotalSize = D.TotalSize/1024
    s = s  "Объем: "  TotalSize  " Kb"  VbCrLf
    'Вычисляем объем свободного пространства диска в килобайтах
    FreeSpace = D.FreeSpace/1024
    s = s  "Свободно: "  FreeSpace  " Kb"  VbCrLf
    'Выводим свойства диска на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Получение сведений о каталоге

    Доступ к свойствам каталога обеспечивает объект Folder. Создать этот объект можно с помощью свойства RootFolder объекта Drive или методов GetFolder, GetParentFolder и GetSpecialFolder объекта FileSystemObject. Также объекты Folder могут быть получены как элементы коллекции Folders.

    В сценарии FolderInfo.vbs на экран выводятся свойства каталога, из которого был запущен сценарий (листинги 6.2).

    '*******************************************************************
    ' Имя: FolderInfo.vbs                                              
    ' Язык: VBScript                                                   
    ' Описание: Вывод на экран даты создания текущего каталога        
    '*******************************************************************
    Dim FSO,WshShell,FoldSize,s  'Объявляем переменные
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    
    'Определяем каталог, из которого был запущен сценарий
    '(текущий каталог)
    Set Folder = FSO.GetFolder(WshShell.CurrentDirectory)
    'Получаем имя текущего каталога
    s = "Текущий каталог: "  Folder.Name  VbCrLf
    'Получаем дату создания текущего каталога
    s = s  "Дата создания: "  Folder.DateCreated  VbCrLf
    'Вычисляем размер текущего каталога в килобайтах
    FoldSize=Folder.Size/1024
    s = s  "Объем: "  FoldSize  " Kb"  VbCrLf
    'Выводим информацию на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Получение сведений о файле

    Доступ ко всем свойствам файла обеспечивает объект File, создать который можно с помощью коллекции Files или метода GetFile объекта FileSystemObject.

    В листинге 6.3 приведен сценарий FileInfo.vbs, в котором на экран выводятся некоторые свойства файла C:\boot.ini.

    '*******************************************************************
    ' Имя: FileInfo.vbs                                                
    ' Язык: VBScript                                                   
    ' Описание: Вывод на экран некоторых свойств файла                
    '*******************************************************************
    Dim FSO,F,s   'Объявляем переменные
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект File
    Set F = FSO.GetFile("C:\boot.ini")
    
    'Получаем имя файла
    s = "Файл: "  F.Name  VbCrLf
    'Получаем дату создания файла
    s = s  "Дата создания: "  F.DateCreated  VbCrLf
    'Получаем тип файла
    s = s  "Тип: "  F.Type  VbCrLf
    'Выводим информацию на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Проверка существования диска, каталога или файла

    Для проверки существования диска, каталога и файла используются соответственно методы DriveExists, FolderExists и FileExists. В листинге 6.4 приведен сценарий IsExistsFile.vbs, в котором проверяется наличие на диске C файла boot.ini.

    '******************************************************************
    ' Имя: IsExistsFile.vbs                                            
    ' Язык: VBScript                                                   
    ' Описание: Проверка существования файла                          
    '*******************************************************************
    Dim FSO,FileName 'Объявляем переменные
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    
    FileName = "C:\boot.ini"
    if  FSO.FileExists(FileName)  Then
      'Выводим информацию на экран
      WScript.Echo "Файл "  FileName  " существует"
    else
      'Выводим информацию на экран
      WScript.Echo "Файл "  FileName  " не существует" 
    end if
    '*************  Конец *********************************************

    Получение списка всех имеющихся дисков

    Каждому из дисков компьютера (включая подключенные сетевые диски и дисководы со сменными носителями) соответствует элемент коллекции Drives (объект Drive ). Таким образом, для построения списка дисков компьютера нужно в цикле перебрать все элементы коллекции Drives.

    В листинге 6.5 приведен сценарий ListDrives.vbs, в котором на экран выводятся сведения обо всех доступных дисках.

    '*******************************************************************
    ' Имя: ListDrives.vbs                                              
    ' Язык: VBScript                                                   
    ' Описание: Получение списка всех имеющихся дисков                
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,s,ss,Drives,D
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем коллекцию дисков, имеющихся в системе
    Set Drives = FSO.Drives
    s = ""
    
    'Перебираем все диски в коллекции
    For Each D In Drives
      'Получаем букву диска
      s = s  D.DriveLetter
      s = s  " - "
      if (D.DriveType = 3) then  'Проверяем, не является ли диск сетевым
        'Получаем имя сетевого ресурса
        ss = D.ShareName
      else 
        'Диск является локальным
        if (D.IsReady) then  'Проверяем готовность диска
          'Если диск готов, то получаем метку тома для диска
          ss = D.VolumeName
        else
          ss = "Устройство не готово"
        end if  
      s = s  ss  VbCrLf
      end if  
    Next
    
    'Выводим полученные строки на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Получение списка всех подкаталогов заданного каталога

    Для построения списка всех подкаталогов определенного каталога можно воспользоваться коллекцией Folders, которая хранится в свойстве SubFolders соответствующего объекта Folder и содержит объекты Folder для всех подкаталогов.

    В листинге 6.6 приведен сценарий ListSubFold.vbs, в котором на экран выводятся названия всех подкаталогов каталога C:\Program Files.

    '*******************************************************************
    ' Имя: ListSubFold.vbs                                             
    ' Язык: VBScript                                                   
    ' Описание: Получение списка всех подкаталогов заданного каталога 
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,SFold,SubFolders,Folder,s
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Путь к каталогу
    SFold = "C:\Program Files"
    s = "Каталог "  SFold  VbCrLf
    s = s  "Подкаталоги:"  VbCrLf
    'Создаем объект Folder для каталога C:\Program Files
    Set F=FSO.GetFolder(SFold)
    
    'Создаем коллекцию подкаталогов каталога C:\Program Files
    Set SubFolders = F.SubFolders
    
    'Цикл по всем подкаталогам
    For Each Folder In SubFolders
      'Добавляем строку с именем подкаталога
       s = s  Folder  VbCrLf
    Next
    
    'Выводим полученные строки на экран
    WScript.Echo s
    '*************  Конец *********************************************/

    Получение списка всех файлов заданного каталога

    В свойстве Files объекта Folder, соответствующего определенному каталогу, хранится коллекция находящихся в этом каталоге файлов (объектов File ). В листинге 6.7 приведен сценарии ListFiles.vbs, выводящий на экран названия всех файлов, которые содержатся в специальной папке Мои документы.

    '*******************************************************************
    ' Имя: ListFiles.vbs                                               
    ' Язык: VBScript                                                   
    ' Описание: Получение списка всех файлов заданного каталога       
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,File,Files,WshShell,PathList,s
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем объект WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    'Создаем объект WshSpecialFolders
    Set WshFldrs = WshShell.SpecialFolders
    'Определяем путь к папке Мои документы
    PathList = WshFldrs.item("MyDocuments")  "\"
    'Создаем объект Folder для папки Мои документы
    Set F = FSO.GetFolder(PathList)
    'Создаем коллекцию файлов каталога Мои документы
    Set Files = F.Files
    s = "Файлы из каталога "  PathList  VbCrLf
    'Цикл по всем файлам
    For Each File In Files
      'Добавляем строку с именем файла
      s = s  File.Name  VbCrLf
    Next
    
    'Выводим полученные строки на экран
    WScript.Echo s
    '*************  Конец *********************************************

    Создание каталога

    Создать новый каталог на диске можно либо с помощью метода CreateFolder объекта FileSystemObject, либо с помощью метода Add коллекции Folders. Оба эти метода используются в сценарии MakeFolder.vbs для создания в каталоге C:\Program Files подкаталогов Новая папка и Еще одна новая папка (листинг 6.8).

    '*******************************************************************
    ' Имя: MakeFolder.vbs                                           
    ' Язык: VBScript                                                   
    ' Описание: Создание нового каталога                              
    '*******************************************************************
    'Объявляем переменные
    Dim FSO, F, SubFolders
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем каталог C:\Program Files\Новая папка
    FSO.CreateFolder("C:\Program Files\Новая папка")
    'Создаем объект Folder для каталога C:\Program Files
    Set F = FSO.GetFolder("C:\Program Files")
    'Создаем коллекцию подкаталогов каталога C:\Program Files
    Set SubFolders = F.SubFolders
    'Создаем каталог C:\Program Files\Еще одна новая папка
    SubFolders.Add "Еще одна новая папка"
    '*************  Конец *********************************************

    Создание текстового файла

    Для создания текстового файла используется метод CreateTextFile объекта FileSystemObject, который имеет один обязательный текстовый параметр (путь к создаваемому файлу) и два необязательных логических параметра ( Overwrite и Unicode ).

    Параметр Overwrite имеет значение в том случае, когда создаваемый файл уже существует. Если Overwrite равно True, то такой файл перепишется (старое содержимое будет утеряно), если же в качестве Overwrite указано False, то файл переписываться не будет. Если этот параметр вообще не указан, то существующий файл также не будет переписан.

    Параметр Unicode указывает, в каком формате (ASCII или Unicode) следует создавать файл. Если Unicode равно True, то файл создается в формате Unicode, если же Unicode равно False или этот параметр вообще не указан, то файл создается в режиме ASCII.

    В сценарии CreateTempFile.vbs (листинг 6.9) показано, каким образом можно создать файл со случайно выбранным именем (такие файлы часто используются для записи временных данных).

    '*******************************************************************
    ' Имя: CreateTempFile.vbs                                                
    ' Язык: VBScript                                                   
    ' Описание: Создание временного файла со случайным именем         
    '*******************************************************************
    Dim FSO,FileName,F,s  'Объявляем переменные
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Генерируем случайное имя файла
    FileName = FSO.GetTempName
    'Создаем файл с именем FileName
    Set F = FSO.CreateTextFile(FileName, true) 
    'Закрываем файл
    F.Close
    'Сообщаем о создании файла
    WScript.Echo "Был создан файл "  FileName
    '*************  Конец *********************************************

    Операции чтения и записи строк для текстового файла

    Последовательный (строка за строкой) доступ к текстовому файлу обеспечивает объект TextStream. Методы этого объекта позволяют читать информацию из файла и записывать ее в него. Создается объект TextStream при открытии или создании текстового файла с помощью следующих методов:

  • CreateTextFile объектов FileSystemObject и Folder;
  • OpenTextFile объекта FileSystemObject;
  • OpenAsTextStream объекта File.
  • Перечисленные ранее методы позволяют открывать файл в разных режимах ввода/вывода (за это отвечает параметр Iomode ) с использованием разных форматов (в соответствии со значением параметра Format ) (см. табл. 6.2, 6.3)

    Параметр Iomode
    КонстантаЗначениеОписание
    ForReading 1 Файл открывается только для чтения, записывать информацию в него нельзя
    ForWriting 2 Файл открывается для записи. Если файл с таким именем уже существовал, то при новой записи его содержимое теряется
    ForAppending 8 Файл открывается для добавления. Если файл уже существовал, то информация будет дописываться в конец этого файла
    Параметр Format
    КонстантаЗначениеОписание
    TristateUseDefault -2 Файл открывается в формате, используемом системой по умолчанию
    TristateTrue -1 Файл открывается в формате Unicode
    TristateFalse 0 Файл открывается в формате ASCII

    В листинге 6.10 приведен сценарий TextFile.vbs, в котором создается файл test1.txt и в него записываются строка текста. После этого файл открывается для чтения, строка считывается из него и выводится на экран.

    '*******************************************************************
    ' Имя: TextFile.vbs                                                
    ' Язык: VBScript                                                  
    ' Описание: Запись строк в текстовый файл и чтение из него     
    '*******************************************************************
    Dim FSO,F,TextStream,s  'Объявляем переменные
    ' Инициализируем константы
    Const ForReading = 1, ForWriting = 2, TristateUseDefault = -2
    
    ' Создаем объект FileSystemObject
    Set FSO=WScript.CreateObject("Scripting.FileSystemObject")
    ' Создаем в текущем каталоге файл test1.txt
    FSO.CreateTextFile "test1.txt"
    ' Создаем объект File для файла test1.txt
    set F=FSO.GetFile("test1.txt")
    ' Создаем объект TextStream (файл открывается для записи)
    Set TextStream=F.OpenAsTextStream(ForWriting, TristateUseDefault)
    ' Записываем в файл строку
    TextStream.WriteLine "Это первая строка"
    ' Закрываем файл
    TextStream.Close
    ' Открываем файл для чтения
    Set TextStream=F.OpenAsTextStream(ForReading, TristateUseDefault)
    ' Считываем строку из файла
    s=TextStream.ReadLine
    ' Закрываем файл 
    TextStream.Close
    ' Отображаем строку на экране
    WScript.Echo "Первая строка из файла test1.txt:"  vbCrLf  vbCrLf  s
    '*************  Конец *********************************************

    Копирование и перемещение файлов и каталогов

    Для копирования файлов/каталогов можно применять метод CopyFile/CopyFolder объекта FileSystemObject или метод Copy соответствующего этому файлу/каталогу объекта File/Folder. Перемещаются файлы/каталоги с помощью методов MoveFile/MoveFolder объекта FileSystemObject или метода Move соответствующего этому файлу/каталогу объекта File/Folder.

    Отметим, что при использовании всех этих методов процесс копирования или перемещения прерывается после первой возникшей ошибки. Кроме того, нельзя перемещать файлы и каталоги с одного диска на другой.

    В листингах 6.11 и 6.12 приведен сценарий CopyFile.vbs, иллюстрирующий использование метода Copy. В этом сценарии на диске C создается файл TestFile.txt, который затем копируется на рабочий стол.

    '*******************************************************************
    ' Имя: CopyFile.vbs                                                
    ' Язык: VBScript                                                   
    ' Описание: Создание и копирование файла                          
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,WshShell,WshFldrs,PathCopy
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Создаем файл
    Set F = FSO.CreateTextFile("C:\TestFile.txt", true)
    'Записываем в файл строку
    F.WriteLine "Тестовый файл"
    'Закрываем файл
    F.Close
    
    'Создаем объект WshShell
    Set WshShell = WScript.CreateObject("WScript.Shell")
    'Создаем объект WshSpecialFolders
    Set WshFldrs = WshShell.SpecialFolders
    'Определяем путь к рабочему столу
    PathCopy = WshFldrs.item("Desktop")+"\"
    'Создаем объект File для файла C:\TestFile.txt
    Set F = FSO.GetFile("C:\TestFile.txt")
    'Копируем файл на рабочий стол
    F.Copy PathCopy
    '*************  Конец *********************************************

    Удаление файлов и каталогов

    Для удаления файлов/каталогов можно применять метод DeleteFile/DeleteFolder объекта FileSystemObject или метод Delete соответствующего этому файлу/каталогу объекта File/Folder. Отметим, что при удалении каталога неважно, является ли он пустым или нет — удаление будет произведено в любом случае. Если же заданный для удаления файл/каталог не будет найден, то возникнет ошибка.

    В листинге 6.12 приведен сценарий DeleteFile.vbs, в котором производится удаление предварительно созданного файла C:\TestFile.txt.

    '*******************************************************************
    ' Имя: DeleteFile.vbs
    ' Язык: VBScript                                                   
    ' Описание: Создание и удаление файла                             
    '*******************************************************************
    'Объявляем переменные
    Dim FSO,F,FileName
    
    'Создаем объект FileSystemObject
    Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
    'Задаем имя файла
    FileName="C:\TestFile.txt"
    'Создаем файл
    Set F = FSO.CreateTextFile(FileName, true)
    'Записываем в файл строку
    F.WriteLine "Тестовый файл"
    'Закрываем файл
    F.Close
    WScript.Echo "Файл создан"
    FSO.DeleteFile FileName
    WScript.Echo "Файл удален"
    '*************  Конец *********************************************
    Вернуться к учебному плану