Инструмент командной строки для рекурсивного удаления папки с указанным именем в Windows? - PullRequest
68 голосов
/ 06 февраля 2009

Я хочу удалить все "_svn" в каждой папке и подпапке ...

Например

c:\
  proyect1
   _svn
   images
     _svn
     banner
       _svn
     buttons
       _svn

Тогда я запускаю что-то вроде

rm-recurse c:\proyect1 _svn

И я должен получить:

c:\
  proyect1
   images
     banner
     buttons

Идеальной вещью будет крошечный автономный EXE-файл или что-то в этом роде.

- Спасибо, Грант, как только я опубликовал вопрос, я увидел документацию SVN о команде экспорта SVN, но я также хочу удалить папки _vti_ *, которые создает Visual Studio, поэтому я также исследую for решение.

Ответы [ 8 ]

129 голосов
/ 06 февраля 2009

Аналогично BlackTigerX "для", я собирался предложить

for /d /r . %d in (_svn) do @if exist "%d" rd /s/q "%d"

27 голосов
/ 13 ноября 2009

Время выучить немного PowerShell ; o)

Get-ChildItem -path c:\projet -Include '_svn' -Recurse -force | Remove-Item -force -Recurse

Первая часть рекурсивно находит каждую папку _svn. Сила используется для поиска скрытых папок. Вторая часть используется для удаления этих папок и их содержимого. Командлет Remove поставляется с удобным параметром "whatif", который позволяет предварительно просмотреть, что будет сделано.

PowerShell доступен для Windows XP и Windows Vista. Он присутствует в Windows 7 и Windows Server 2008 R2 по умолчанию.

Это продукт MS, он бесплатный и потрясающий!

22 голосов
/ 29 июля 2011

Для включения / вызова изнутри файла BATCH используйте (скажем, для удаления папки Debug и Release):

for /d /r . %%d in (Debug Release) do @if exist "%%d" echo "%%d" && rd /s/q "%%d"

double % требуется в командном файле для работы в качестве escape-символов. Иначе он сообщает об ошибке синтаксиса.

Спасибо.

14 голосов
/ 06 февраля 2009
for /f "usebackq" %d in (`"dir _svn /ad/b/s"`) do rd /s/q "%d"

http://ebersys.blogspot.com/2008/07/recursively-delete-svn-folders-easy-way.html

10 голосов
/ 06 февраля 2009

в винде? Если вы используете tortoiseSVN, вы можете использовать команду export для экспорта копии проекта без папок .svn / _svn.

4 голосов
/ 13 ноября 2009
import os
import shutil

curdir = os.path.abspath(os.path.dirname(__file__))

def removedir(dirname, name = ".svn"):
    if os.path.isdir(dirname):
        for file in os.listdir(dirname):
            if os.path.isdir(os.path.join(dirname, file)) and file == name:
                thedir = os.path.join(dirname, name)
                shutil.rmtree(thedir)
                print ".",
            else:
                removedir(os.path.join(dirname, file))

Я думаю, вы можете попробовать этот скрипт на Python, который будет работать под любой ОС, если у вас установлен Python.

3 голосов
/ 26 октября 2011

Другой вариант из SVN Forum : использовать XCopy с файлом, содержащим список исключаемых файлов / каталогов (в данном случае .svn или _svn)

XCopy C:\VersionedFolder C:\UnVersionedFolder /EXCLUDE:C:\No.SVN.txt /E /C /I /F /R /Y
2 голосов
/ 13 марта 2009

Здесь ... с FreeCommander или TotalCommander

http://www.broobles.com/blog/posts/36

socendani

...