Подтвердить что ты не робот

Удалить содержимое каталога рекурсивно в Windows

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

До сих пор у меня есть следующее:

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

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

В UNIX я бы решил следующее:

rm -rf *

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

4b9b3361

Ответ 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

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