Удалить содержимое каталога рекурсивно в Windows
Мне нужно удалить все содержимое каталога (вложенные папки и все) без удаления самого каталога. Воспроизведение каталога после того, как факт не является опцией, поскольку он блокируется запущенным процессом, и его удаление не удастся.
До сих пор у меня есть следующее:
rd /s /q dir1
rd /s /q dir2
rd /s /q dir3
del /q /f *
Это работает, но очевидная проблема заключается в том, что я должен обновлять этот script каждый раз при изменении набора файлов первого уровня.
В UNIX я бы решил следующее:
rm -rf *
Что такое эквивалент Windows?
Ответы
Ответ 1
Предполагая, что вы выполняете команду из каталога верхнего уровня:
for /d %X in (*.*) do rd /s /q %X
Если вы выполняете это с помощью script, вы должны использовать знаки двойного процента:
for /d %%X in (*.*) do rd /s /q %%X
Если вам нужно также удалить файлы в каталоге верхнего уровня, добавьте это в script:
del /q /f *
Ответ 2
Я знаю, что это старый вопрос со старым ответом, но я нашел более простой способ сделать это и подумал об обмене его.
Вы можете войти в целевой каталог и использовать команду rd
. Поскольку Windows не позволит вам удалять файлы или каталоги, используемые в данный момент, и вы используете целевой каталог, введя его в него, вы удалите все содержимое, за исключением самого целевого каталога.
cd mydir
rd /s /q .
Появится сообщение:
Процесс не может получить доступ к файлу, потому что он используется другим процессом.
Это произойдет, когда после удаления всего содержимого команда rd
не сможет удалить текущий каталог, потому что вы находитесь в нем. Но вы увидите, что это не настоящая ошибка, если вы эхо отзываете последний код выхода, который будет 0
.
echo %errorlevel%
0
Это то, что я использую, и оно отлично работает. Надеюсь, это поможет.