Файловая система 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 "Процесс удаления завершен" |
Данный сценарий на языке 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, который позволяет удалить пустые папки, если есть вопросы, пишите в комментариях.