Как удалить файл через vbs
Объектная модель FileSystemObject (FSO) позволяет вам работать программно с дисками и файлами так же, как вы это делаете в Проводнике Windows интерактивно. Вы можете копировать и перемещать папки, получать информацию о дисках и папках и т.п.
Получение информации о дисках
- Общий объём диска в байтах (свойство TotalSize)
- Объём свободного места на диске в байтах (свойства AvailableSpace или FreeSpace)
- Какая буква назначена диску (свойство DriveLetter)
- Тип диска: съёмный, не съёмный, сетевой, CD-ROM или RAM-диск (свойство DriveType)
- Серийный номер диска (свойство SerialNumber)
- Тип файловой системы: FAT, FAT32, NTFS или др. (свойство FileSystem)
- Доступность диска в текущий момент (свойство IsReady)
- Сетевое имя или метка тома (свойства ShareName и VolumeName)
- Путь к корневой директории диска (свойства Path и RootFolder)
Пример использования объекта Drive
Используйте объект Drive для получения информации о диске. Вы не увидите ссылку на актуальный объект Drive в следующем коде. Вместо этого используется метод GetDrive для получения ссылки на существующий объект Drive (в нашем примере это переменная drv).
Следующий пример демонстрирует использование объекта Drive в VBScript:
Работа с папками
Общие задачи по работе с папками и методы для их выполнения описаны ниже в таблице:
Задача | Метод |
Создание папки | FileSystemObject.CreateFolder |
Удаление папки | Folder.Delete или FileSystemObject.DeleteFolder |
Перемещение папки | Folder.Move или FileSystemObject.MoveFolder |
Копирование папки | Folder.Copy или FileSystemObject.CopyFolder |
Получение имени папки | Folder.Name |
Узнать, существует ли папка на диске | FileSystemObject.FolderExists |
Получить экземпляр существующего объекта Folder | FileSystemObject.GetFolder |
Получить имя родительской папки | FileSystemObject.GetParentFolderName |
Получить путь системных папок | FileSystemObject.GetSpecialFolder |
Пример использования данного объекта см. в разделе «3.7. Пример работы с объектом FileSystemObject».
В следующем примере показано использование объектов Folder и FileSystemObject, где выполняется управление папками и получение информации о них:
Любому пользователю операционной системы Windows рано или поздно нужно осуществить удаление ненужных файлов Windows, как правило, это разный мусор, который мы загрузили в мимолетном состоянии эйфории. В большинстве случаев задача решается простым выбором с помощью мышки ненужных файлов и нажатие на кнопку "DEL" на клавиатуре…
Однако, немало важно рассмотреть, как данная задача решается программным путём, а именно, с помощью сервера сценариев Windows Script Host и программирования с помощью скриптовых языков. За работу с файловой системой отвечает объект FileSystemObject, а за удаление ненужных файлов Windows отвечает его метод DeleteFile, кроме него, мы ещё рассмотрим метод GetTempName, который позволит генерировать временное имя файла. Давайте рассмотрим синтаксис данных методов.
DeleteFile ( filespec [,force]) – Методу передаются два параметра, один из них является обязательным, а другой нет:
- filespec – строковое значение, определяет полный путь к файлу Windows, который надо удалить, можно использовать подстановочные знаки, например, символ вопроса ("?"), который заменяет любой один символ и звездочку ("*"), которая заменяет любое количество символов.
- force – это необязательный параметр, он принимает логическое значение true (можно удалить файлы с атрибутом только для чтения) и false (данное значение идет по умолчанию, говорит о запрете на удаление файлов с атрибутом только для чтения.)
GetTempName () – Как уже было сказано, метод позволяет генерировать случайное имя файла с расширением tmp. Именно его мы будем использовать для создания временных файлов, что бы потом произвести удаление файлов Windows.
Хорошо, теперь давайте приступим к программированию, как всегда, я сначала приведу программный код на языке vbscript, дам пояснения к программному коду, а уже потом приведу пример программного кода но уже на языке jscript.
'********************************************** ' Объект FileSystemObject методы DeleteFile и GetTempName ' Удаление ненужных файлов Windows ' DeleteFile.vbs '********************************************** Option Explicit dim WshShell, cur_dir, FSO, new_folder, i ' формируем ссылку на объект set WshShell = CreateObject("WScript.Shell") ' путь к текущему каталогу cur_dir = WshShell.CurrentDirectory ' создаем ссылку на экземпляр объекта FileSystemObject set FSO=CreateObject ("Scripting.FileSystemObject") ' в текущей папке создаем новый каталог set new_folder=FSO.CreateFolder("Новый каталог_vbs") ' циклично создаем 9 временных файлов for i=1 to 9 FSO.CreateTextFile(new_folder & "\" & FSO.GetTempName) next WScript.Echo "Проверьте содержимое каталога " & new_folder WScript.Echo "Сейчас произойдет удаление файлов Windows в каталоге " & new_folder ' производим всех файлов FSO.DeleteFile new_folder & "\*.*", true ' удаляем каталог FSO.DeleteFolder new_folder, true WScript.Echo "Процесс удаления завершен"
Обратите внимание, что в этом сценарии на языке vbscript я использовал родную функцию vbscript – CreateObject для создания ссылки на объект, плюс, там, где не нужно обрабатывать возвращаемое значение, я просто прописывал вызов метода. Сам сценарий работает по следующей схеме: сначала происходит создание каталога в текущей папке, далее в нём будет создано девять файлов, у которых будут случайные имена, сгенерированные с помощью метода GetTempName. Далее происходит вывод диалоговых окон, которые информируют пользователя о том, что бы он проверил содержимое текущего каталога и о том, что произойдёт удаление ненужных файлов Windows в созданной папке, а потом будет удалена и сама папка, для удаления каталога мы использовали метод DeleteFolder (более детально, читайте в статье "Объект FileSystemObject метод DeleteFolder"), файловая система Windows.
Хорошо, давайте продолжим программировать, но уже на языке jscript. Программный код выполняет ту же задачу, что и пример выше, разница лишь в том, что тут создаваемая папка будет иметь другое имя.
//********************************************** // Объект FileSystemObject методы DeleteFile и GetTempName // Удаление ненужных файлов Windows // DeleteFile.js //********************************************** var WshShell, cur_dir, FSO, new_folder, i; // формируем ссылку на объект WshShell = WScript.CreateObject("WScript.Shell"); // путь к текущему каталогу cur_dir = WshShell.CurrentDirectory; // создаем ссылку на экземпляр объекта FileSystemObject FSO= WScript.CreateObject ("Scripting.FileSystemObject"); // в текущей папке создаем новый каталог new_folder=FSO.CreateFolder("Новый каталог_js"); // циклично создаем 9 временных файлов for (i=1; i WScript.Echo ("Проверьте содержимое каталога " + new_folder); WScript.Echo ("Сейчас произойдет удаление файлов Windows в каталоге " + new_folder); // производим всех файлов FSO.DeleteFile (new_folder + "\\*.*", true); // удаляем каталог FSO.DeleteFolder (new_folder, true); WScript.Echo ("Процесс удаления завершен");
Как и в предыдущем примере, тут логика работы и суть аналогична – удаление ненужных файлов, только стоит обратить внимание на одну мелкую деталь, в vbscript передача параметров переходит без указания круглых скобок, а для языка jscript всегда нужно для метода указывать круглые скобки, даже если никакие параметры не передаются .
И так, давайте подытожим: в этой статье мы рассмотрели метода DeleteFile и GetTempName объекта FileSystemObject, которые позволяют генерировать случайные имена для файлов, а также удалять ненужные файлы Windows.
Спасибо за внимание. Автор блога Владимир Баталий
Работа с файлами Windows средствами Windows Script Host осуществляется с помощью объекта File и коллекции Files. Что бы получить доступ к классу _File_ используется метод GetFile объекта FileSystemObject. При работе с файлами для доступа к коллекции Files используется одноименное свойства объекта Folder.
Давайте рассмотрим соответствующие свойства и методы класса _File_.
Свойства объекта File – работа с файлами Windows
Attributes – Данное свойство дает возможность просмотреть или изменить атрибуты. Виды атрибутов, в скобках указано цифровое значение:
- Normal – Обычный, без установленных атрибутов (0).
- Readonly - Только чтение (1).
- Hidden - Скрытый (2).
- System – Системный (4).
- Directory - Папка или каталог (возможно, с атрибутом «только для чтения») (16).
- Archive – Архивный (32).
- Alias - Ярлык (1024).
- Compressed – Сжатый (только для Windows NT/2000) (2048).
Пользователь может комбинировать значения констант для свойства Attributes.
DateCreated – Дата и время создания. Только_чтение.
DateLastAccessed - Дата и время последнего обращения. Только_чтение.
DateLastModified - Дата и время последней модификации документа. Доступно только для чтения
Drive – Буква диска для устройства, на котором лежит документ. Только_чтение.
Name – При работе с файлами позволяет просмотреть или изменить их имя. Чтение_и_запись
ParentFolder – Возвращает путь к каталогу, в котором лежит документ. Только чтение.
Path - Путь к документу
ShortName - Короткое имя (например, 233_6E~3 ).
ShortPath - Короткий путь (например, C:\work\233_6E~3 ).
Size - Размер в байтах
Type – Позволяет получить информацию о типе.
Методы объекта File – работа с Windows файлами
Copy (destination [, overwrite]) – При работе с файлами Windows позволяет произвести его копирование в заданное место, destination задает файл, в который будет производиться копирование, нельзя использовать подстановочные символы (*,? и так далее), overwrite: значение TRUE – произвести замену, FALSE – нет. Вместо метода Сору можно использовать метод CopyFile.
Delete ([force]) – Позволяет удалить документ. Если параметр force равен false или не указан, то с помощью данного метода будет нельзя удалить элемент с атрибутом "только для чтения" (read-only), установка для force значения true позволит сразу удалять такие элементы. Вместо метода Delete можно использовать метод DeleteFile (FileSystemObject).
Move (destination) – При работе с файлом Windows, метод позволяет переместить его в другое место, destination определяет место назначения; подстановочные знаки в имени недопустимы. Вместо метода Move можно использовать MoveFile (FileSystemObject).
OpenAsTextStream ([iomode, [format] ]) – Открывает файл, метод вернет класс TextStream, используя который можно производить чтение, запись или добавление данных в текстовый файл, iomode задает режим ввода/вывода и может принимать те же значения, что и одноименный параметр в методе OpenTextFile, format определяет формат (ASCII (0) или Unicode(1)). Открыть текстовый файл для чтения можно также с помощью метода OpenTextFile (FileSystemObject).
Ниже приведен пример работы с файлами, а именно, чтение атрибутов, дата создания, изменения и последнего обращения.
Первый сценарий написан на языке VBScript, а второй на языке JScript, по умолчанию анализируется C:\\Autoexec.bat, но вы можете изменить это значение или просто перетянуть документ на значок сценария.
Пример на языке vbscript:
' ************************************************************************** ' Класс File ' Работа с файлами Windows ' rabota-s-fajlami.vbs ' ******************************************************************************** Option Explicit Dim fso, oFile, objArgs, Text1, attrib, file, title Title = "Работа с Windows файлами" ' документ для анализа file = "C:\Autoexec.bat" Set objArgs = WScript.Arguments ' В качестве анализа можно просто перетянуть документ на значок сценария If objArgs.Count > 0 Then file = objArgs(0) Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' Проверяем, существует ли файл If fso.FileExists(file) Then Set oFile = fso.GetFile(file) ' Получаем информацию Text1 = "Документ: " & vbTab & oFile.Name & vbCrLf & "Создан: " & vbTab & oFile.DateCreated & vbCrLf & "Изменен: " & vbTab & oFile.DateLastModified & vbCrLf & "Последнее обращение: " & vbTab & oFile.DateLastAccessed & vbCrLf & "Атрибуты " & vbTab attrib = oFile.Attributes ' Это атрибут "только для чтения". If (attrib And &H01) > 0 Then Text1 = Text1 & "r " ' "скрытый". If (attrib And &H02) > 0 Then Text1 = Text1 & "h " ' "системный". If (attrib And &H04) > 0 Then Text1 = Text1 & "s " ' "архивный". If (attrib And &H20) > 0 Then Text1 = Text1 & "a " ' "сжатый". If (attrib And &H800) > 0 Then Text1 = Text1 & "c " MsgBox Text1, vbOKOnly + vbInformation, Title Else WScript.Echo "Ошибка " & file & " не найден" End If
Пример на языке JScript:
// ************************************************************************** // Класс File // Работа с файлами Windows // rabota-s-fajlami.js // ******************************************************************************** // документ для анализа var file = "C:\\Autoexec.bat"; var Title = "Работа с Windows файлами"; var vbOKOnly = 0; var vbInformation = 64; var Text; var objArgs = WScript.Arguments; var attrib; // В качестве анализа можно просто перетянуть документ на значок сценария if (objArgs.length > 0) file = objArgs(0); var fso = WScript.CreateObject("Scripting.FileSystemObject"); WshShell = WScript.CreateObject("WScript.Shell"); // Проверяем, существует ли файл if (!fso.FileExists(file)) < WScript.Echo("Ошибка ", file, " не найден"); WScript.Quit(1); >var j = fso.GetFile(file); // Получаем информацию Text = "Документ: \t\t" + j.name + "\n" + "Создан: \t\t" + j.DateCreated + "\n"+ "Изменен: \t\t" + j.DateLastModified + "\n"+ "Последнее обращение: \t" + j.DateLastAccessed + "\n"; // Декодировать атрибуты. Text += "Атрибуты \t\t"; attrib = j.Attributes; if ((attrib & 0x01) != 0) Text += "r "; if ((attrib & 0x02) != 0) Text += "h "; if ((attrib & 0x04) != 0) Text += "s "; if ((attrib & 0x20) != 0) Text = "a "; if ((attrib & 0x800) != 0) Text += "c "; WshShell.Popup(Text,0,Title, vbOKOnly + vbInformation);
И так, программирование примеров закончено, теперь давайте рассмотрим сам программный код. По сути, вся работа с Windows файлами заключается в анализе Autoexec.bat, но это по умолчанию, так как сценарии обрабатывают передаваемые параметры, поэтому мы можем перетянуть на значок скрипта любой другой документ для его анализа. В конечно итоге будет выводится базовая информация: тип, дата создания, дата изменения и так далее.
Спасибо за внимание. Автор блога Владимир Баталий
Есть три способа создания пустого текстового файла (иногда называемого как «text stream»).
Первый способ — это использование метода CreateTextFile. В следующем примере показано, как создать текстовый файл, используя этот метод: Пример использования данного метода см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Второй способ — это использование метода OpenTextFile объекта FileSystemObject с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод: Третий способ — это использование метода OpenAsTextStream с набором флагов ForWriting. В следующем примере показано, как создать текстовый файл, используя этот метод:
Добавление данных в файл
- Открыть текстовый файл
- Записать данные
- Закрыть файл
Для записи данных в текстовый файл используйте методы Write, WriteLine или WriteBlankLines объекта TextStream, в зависимости от задач, описанных в приведённой ниже таблице:
Задача | Метод |
Запись данных в текстовый файл без символа перехода на новую строку в конце | Write |
Запись данных в текстовый файл с символом перехода на новую строку в конце | WriteLine |
Запись одной или более пустых строк в открытый текстовый файл | WriteBlankLines |
Для закрытия текстового файла используйте метод Close объекта TextStream. Закрыть файл можно также методом Close объекта FileSystemObject. Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
ПРИМЕЧАНИЕ
Символ новой строки содержит символ или символы (зависит от операционной системы) для перевода курсора в начало новой строки (возврат каретки/перевод строки). Следует учитывать, что некоторые строки уже могут иметь в конце эти непечатаемые символы.
В следующем примере показано, как выполняется запись данных в открытый файл всеми тремя методами, затем файл закрывается:
Чтение файлов
Для чтения данных из файла используйте методы Read, ReadLine или ReadAll объекта TextStream. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
Задача | Метод |
Чтение указанного количества символов из файла | Read |
Чтение полной строки из файла (до символа конца строки, но не включая его) | ReadLine |
Чтение всего содержимого файла | ReadAll |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
Если вы используете методы Read или ReadLine и хотите пропустить определённую часть данных, то используйте методы Scip или ScipLine. Полученный в результате работы этих методов текст может быть сохранён в строку, которую можно отобразить на экране в элементе управления, передать в качестве параметра в строковую функцию (например, в Left, Right или Mid), соединить с другой строкой и т.п.
В следующем примере показано, как открыть файл, записать в него данные, а затем прочитать их:
Перемещение, копирование и удаление файлов
Объектная модель FSO имеет для каждой из операций перемещения, копирования или удаления файлов по два метода. Эти методы и задачи, решаемые с их помощью, описаны в приведённой ниже таблице:
Задача | Метод |
Перемещение файла | File.Move или FileSystemObject.MoveFile |
Копирование файла | File.Copy или FileSystemObject.CopyFile |
Удаление файла | File.Delete или FileSystemObject.DeleteFile |
Пример использования данных методов см. в разделе «3.7. Пример работы с объектом FileSystemObject».
В следующем примере создаётся текстовый файл в корневом каталоге диска С, записывается в него некоторая информация. Затем файл перемещается в директорию с именем \tmp, копируется в директорию \temp, а затем удаляются копии из обеих директорий.
Для проверки работы этого примера создайте в корневом каталоге диска С директории tmp и temp.
Файловая система Windows – огромное количество файлов, папок, игр и прочих документов. Рано или поздно приходиться создавать новые объекты или удалять старые. В ручном режиме всё сводится к клавишам клавиатуры и работе с мышкой.
Но вот в программировании всё не так просто, порой то, что кажется логичным и простым в глазах человека, представляет трудность для программного кода. Например, что бы удалить пустые папки в Windows, мы сначала проверяем их содержимое, если ничего нет – жмем клавишу "DEL", в менеджере TotalCommander всё еще проще – мы можем просто выбрать нужную папку и нажать пробел, в итоге, если папка не пуская, то мы увидим ее размер, и соответственно поймём, удалить пустые папки или нет…
Как я сказал, в программировании простые задачи не всегда решаются столь же просто, так, у объекта FileSystemObject есть метод DeleteFolder, который позволяет удалить пустые папки в Windows, но это только условность. Дело в том, что если папка пустая, то удаление пройдёт без проблем, если же нет – возникнет ошибка. Если включить в программном коде обработку ошибок, то не нужно будет предварительно проверять содержимое или размер папки перед её удалением.
Давайте подробно рассмотрим метод DeleteFolder…
DeleteFolder (folderspec [,force]) – видим, что метод принимает два параметра:
- folderspec – путь к папке, которую надо удалить, можно использовать подстановочные знаки, например "?" – любой символ и "*" – любое количество символов, это позволяет удалить сразу несколько пустых папок без применения циклов.
- force – Необязательный параметр, принимает логическое значение, true - будут удалены папки с атрибутом только для чтения и false (по умолчанию) – каталоги с атрибутом только для чтения не будут удалены, файловая система Windows.
Стоит отметить, что метод DeleteFolder будет удалять и все вложенные папки, которые находятся в заданном каталоге, естественно, все они должны быть пустыми.
Хорошо, теперь давайте приступим к практике:
'********************************************** ' Объект FileSystemObject метод DeleteFolder ' Удалить пустые папки ' DeleteFolder.vbs '********************************************** Option Explicit dim WshShell, cur_dir, FSO dim new_folder, new_file, new_sub_folder, i ' формируем ссылку на объект set WshShell = CreateObject("WScript.Shell") ' путь к текущему каталогу cur_dir = WshShell.CurrentDirectory ' создаем ссылку на экземпляр объекта FileSystemObject set FSO=CreateObject ("Scripting.FileSystemObject") ' в текущей папке создаем новый каталог set new_folder=FSO.CreateFolder("Новый каталог_vbs") ' циклично создаем 9 каталогов for i=1 to 9 set new_sub_folder=FSO.CreateFolder(new_folder & "\" & i & "_каталог") next WScript.Echo "Проверьте содержимое каталога " & new_folder WScript.Echo "Сейчас произойдет удаление пустой папки " & new_folder ' производим удаление папки и подпапок FSO.DeleteFolder new_folder, true WScript.Echo "Процесс удаления завершен"
//********************************************** // Объект FileSystemObject метод DeleteFolder // Удалить пустые папки // DeleteFolder.js //********************************************** var WshShell, cur_dir, FSO; var new_folder, new_file, new_sub_folder, i; // формируем ссылку на объект WshShell = WScript.CreateObject("WScript.Shell"); // путь к текущему каталогу cur_dir = WshShell.CurrentDirectory; // создаем ссылку на экземпляр объекта FileSystemObject FSO=WScript.CreateObject("Scripting.FileSystemObject"); // в текущей папке создаем новый каталог new_folder=FSO.CreateFolder("Новый каталог_js"); // циклично создаем 9 каталогов for (i=1; i WScript.Echo ("Проверьте содержимое каталога " + new_folder); WScript.Echo ("Сейчас произойдет удаление пустой папки " + new_folder); // производим удаление папки и подпапок FSO.DeleteFolder(new_folder, true) WScript.Echo("Процесс удаления завершен");
В этом сценарии мы также используем цикл for для создания девяти вложенных каталогов (смотрите "Урок 9 по JScript: Цикл for "). Обратите внимание, что тут вместо одной косой черты мы прописывали две, также, вместо символа "&" мы написали "+".
И так, в этой статье мы рассмотрели метод DeleteFolder объекта FileSystemObject, который позволяет удалить пустые папки, если есть вопросы, пишите в комментариях.
Спасибо за внимание. Автор блога Владимир Баталий
Читайте также: