Объект FileSystemObject метод DeleteFolder — удалить пустые папки

Объект FileSystemObject метод DeleteFolder — удалить пустые папки Объектная модель Windows Script Host

Файловая система Windows – огромное количество файлов, папок, игр и прочих документов. Рано или поздно приходиться создавать новые объекты или удалять старые. В ручном режиме всё сводится к клавишам клавиатуры и работе с мышкой…

Но вот в программировании всё не так просто, порой то, что кажется логичным и простым в глазах человека, представляет трудность для программного кода. Например, что бы удалить пустые папки в Windows, мы сначала проверяем их содержимое, если ничего нет – жмем клавишу «DEL», в менеджере TotalCommander всё еще проще – мы можем просто выбрать нужную папку и нажать пробел, в итоге, если папка не пуская, то мы увидим ее размер, и соответственно поймём, удалить пустые папки или нет…

Как я сказал, в программировании простые задачи не всегда решаются столь же просто, так, у объекта FileSystemObject есть метод DeleteFolder, который позволяет удалить пустые папки в Windows, но это только условность. Дело в том, что если папка пустая, то удаление пройдёт без проблем, если же нет – возникнет ошибка. Если включить в программном коде обработку ошибок, то не нужно будет предварительно проверять содержимое или размер папки перед её удалением.

Давайте подробно рассмотрим метод DeleteFolder…

DeleteFolder(folderspec [,force]) – видим, что метод принимает два параметра:

  • folderspec – путь к папке, которую надо удалить, можно использовать подстановочные знаки, например «?» – любой символ и «*» – любое количество символов, это позволяет удалить сразу несколько пустых папок без применения циклов.
  • force – Необязательный параметр, принимает логическое значение, true — будут удалены папки с атрибутом только для чтения и false (по умолчанию) – каталоги с атрибутом только для чтения не будут удалены, файловая система Windows.
Удаление пустых папок в файловой системе 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 "Процесс удаления завершен"

Данный сценарий на языке vbscript создает в текущем каталоге папку, потом в ней создается девять вложенных папок, далее происходит вызов метода DeleteFolder,  что бы удалить пустые папки и сам каталог, в котором они находятся. Переменная cur_dir содержит строковое значение – путь к текущей папке, мы его получаем с помощью свойства CurrentDirectory объекта WScript.Shell (более детально, можете почитать статью «Объект WScript.Shell — метод ExpandEnvironmentStrings и свойство CurrentDirectory«). Переменная new_sub_folder содержит путь к вложенной папке, значение будет меняться в цикле for девять раз, то есть, мы создадим девять папок (детальнее, читайте «Урок 6 по VBScript: Циклы for…next и for each…next«). В самом сценарии будет выводиться трижды диалоговое окно, сперва – просьба проверить содержимое текущей папки, потом – информация о том, что произойдет удаление новой пустой папки и всех вложенных в нее папок, ну и в конце – сообщение о том, что всё прошло успешно.

//**********************************************
// Объект 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<=9; i++){ 
    new_sub_folder=FSO.CreateFolder(new_folder + "\\" + i + "_каталог");
}
 
WScript.Echo ("Проверьте содержимое каталога " + new_folder);
WScript.Echo ("Сейчас произойдет удаление пустой папки " + new_folder);
 
// производим удаление папки и подпапок
FSO.DeleteFolder(new_folder, true)
 
WScript.Echo("Процесс удаления завершен");

В этом сценарии мы также используем цикл for для создания девяти вложенных каталогов (смотрите «Урок 9 по JScript: Цикл for «). Обратите внимание, что тут вместо одной косой черты мы прописывали две, также, вместо символа «&» мы написали «+».

Скачать архив с примерами

Использование метода DeleteFolder класса FileSystemObject

И так, в этой статье мы рассмотрели метод DeleteFolder объекта FileSystemObject, который позволяет удалить пустые папки, если есть вопросы, пишите в комментариях.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий