На этот вопрос ранее уже был дан ответ о переполнении стека, откуда я и взял основной смысл этого ответа.
Попробуйте следующую команду, вы можете запустить ее из cmd
:
for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"
Если вам нужно изменить другие папки, просто добавьте новые элементы в набор (bin,obj)
в середине команды.
Это удалит все совпадения без предупреждения и без использования корзины - так что, если вам нужна дополнительная безопасность, в конце удалите /q
из вызова к rd
, и система должна будет спрашивать вас перед каждым удалением.
for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"
Если вы намереваетесь запустить команду из пакетного файла, вам нужно заменить каждый экземпляр переменной %d
на %%d
, например, так:
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"
Согласно конверсии в комментариях к вопросу
Если команда отказывается запускаться в командном файле (здесь невозможно выполнить репликацию), попробуйте добавить префикс команды к start
. Хотя это и запустит процесс для одновременного запуска с командным файлом, что может вызвать другие проблемы, скорее всего, он будет работать правильно.
Кроме того, если в дереве папок, над которым работает команда, есть файлы с именем obj
или bin
, то вы получите сообщение об ошибке для каждого вложенного файла с соответствующим именем. Эти совпадающие файлы не удаляются и не должны мешать команде удалять то, что должны. Другими словами, их можно безопасно игнорировать.