Я был удивлен тем, как мало кода это занимает.Самым большим трюком является использование SORT /R
на выходе DIR /B /S /AD
, чтобы вы могли обрабатывать дочерние узлы до обработки родительских узлов иерархии папок.
Я быстро протестировал код, нопожалуйста, проверьте себя безопасным способом.
В этой 1-й версии предполагается, что ".SVN"
- полное имя файла.
@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
dir /b "%%A" | findstr /livx ".svn" >nul || rd /s /q "%%A"
)
2-я версия немного изменена, если вы имели в виду "*.SVN"
,Изменяется только одна опция FINDSTR.
@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
dir /b "%%A" | findstr /live ".svn" >nul || rd /s /q "%%A"
)
Обновление: 2012-11-06
Я только что понял, что вышеуказанное решение (я) можно победить, еслинепустая папка с именем .SVN
.Код должен удалять папки, которые либо пусты, либо содержат только файл с именем .SVN
.Не следует удалять папку, если она содержит непустую папку с именем .SVN
.
Ниже приведено исправление для первого решения:
@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
dir /b "%%A"|findstr /livx ".svn" >nul||>nul 2>&1 dir /b /ad .svn||rd /s /q "%%A"
)
А вот исправление длявторое решение
@echo off
setlocal disableDelayedExpansion
for /f "eol=: delims=" %%A in ('dir /b /s /ad ^| sort /r') do (
dir /b "%%A"|findstr /live ".svn" >nul||>nul 2>&1 dir /b /ad *.svn||rd /s /q "%%A"
)