Проблема:
Имеется скрипт, который должен удалять все содержимое (файлы и папки) из заданной директории.
Через некоторое время заметил, что некоторые файлы (например, Thumbs.db) не удаляются.
Оказалось, что команда
Код: Выделить всё
Del /F /S /Q C:\Temp\*
не удаляет файлы с атрибутом "системный". Именно поэтому файлы Thumbs.db не удалялись.
Решение:
Модифицируем команду удаления:
Код: Выделить всё
del /F /S /Q /A: SRHA C:\Temp\*
Теперь удалятся будут ВСЕ файлы из папки C:\Temp\ и вложенных в нее папок, в том числе с одним или несколькими атрибутами:
-
S - Системные файлы
-
R - Доступные только для чтения
-
H - Скрытые файлы
-
A - Файлы для архивирования
Примечание:
Заметил такую особенность: на некоторых версиях Windows нужно обязательно делать пробел между ключом "/A:" и его параметрами "SRHA" вот так: "/A: SRHA", на других же версиях синтаксис команды может быть без пробела: "/A:SRHA"
Альтернативный вариант:
Для удаления файлов с атрибутами, можно выполнять две команды. Первая снимает атрибуты, вторая - удаляет файлы. Например, так:
Код: Выделить всё
forfiles /p C:\Temp\ /s /m thumbs.db /C "cmd /c attrib -S -R -H -A @file & DEL /F /S /Q @file"
Здесь, в параметрах команды DEL можно убрать ключ "/S", предназначенный для рекурсивной обработки, т.к. все равно команда forfiles будет перебирать все файлы по маске в заданной папке.