Удалить содержимое каталога в Windows рекурсивно - PullRequest
11 голосов
/ 24 февраля 2011

Мне нужно удалить все содержимое каталога (вложенные папки и все), не удаляя сам каталог. Воссоздание каталога после факта не вариант, так как он заблокирован запущенным процессом, и удаление его завершится неудачей.

Пока у меня есть следующее:

rd /s /q dir1
rd /s /q dir2
rd /s /q dir3
del /q /f *

Это работает, но очевидная проблема заключается в том, что мне приходится обновлять этот скрипт каждый раз, когда изменяется набор каталогов первого уровня.

В UNIX я бы решил это следующим образом:

rm -rf *

Что такое эквивалент Windows?

Ответы [ 2 ]

16 голосов
/ 24 февраля 2011

Предполагая, что вы выполняете команду из каталога верхнего уровня:

for /d %X in (*.*) do rd /s /q %X

Если вы выполняете это из сценария, вы должны использовать двойные знаки процента:

for /d %%X in (*.*) do rd /s /q %%X

Если вам нужно также удалить файлы в каталоге верхнего уровня, добавьте это в скрипт:

del /q /f *
2 голосов
/ 10 ноября 2017

Я знаю, что это старый вопрос со старым ответом, но я нашел более простой способ сделать это и подумал поделиться им.

Вы можете войти в целевой каталог и использовать * 1003.* команда.Поскольку Windows не позволяет вам удалять какие-либо файлы или каталоги, используемые в настоящее время, и вы используете целевой каталог, войдя в него, вы удалите все содержимое, кроме самого целевого каталога.

cd mydir
rd /s /q .

Вы получите сообщение:

Процесс не может получить доступ к файлу, потому что он используется другим процессом.

Это произойдет, когда послеудаляя все содержимое, команда rd не может удалить текущий каталог, потому что вы стоите в нем.Но вы увидите, что это не настоящая ошибка, если вы откроете последний код выхода, который будет 0.

echo %errorlevel%
0

Это то, что я использую, и он работает нормально.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...