2009-02-06 6 views
62

ich jeden "_svn" in jedem Ordner und Unterordner ...Kommandozeilen-Tool, um Ordner mit einem angegebenen Namen rekursiv in Windows zu löschen?

Zum Beispiel

 
c:\ 
    proyect1 
    _svn 
    images 
    _svn 
    banner 
     _svn 
    buttons 
     _svn 

Dann laufe ich so etwas wie

rm-recurse c:\proyect1 _svn 

löschen möchten, und ich sollte erhalten:

 
c:\ 
    proyect1 
    images 
    banner 
    buttons 

Die ideale Sache wäre eine kleine Stand-alone-EXE oder etwas ähnliches e das.

- Dank Grant, sobald ich die Frage habe ich geschrieben SVN Dokumentation über den SVN Exportbefehl sah, aber ich möchte auch die _vti_ * Ordner stopfen Visual Studio erstellt löschen, also werde ich erkunden auch die for Lösung.

+0

Bitte umformulieren dies in Form einer Frage ausgeschlossen werden; Bitten Sie um Hilfe bei der Entwicklung eines Tools, um dies zu tun, oder möchten Sie wissen, ob solche Tools verfügbar sind? – Rob

+0

erstellen Sie einfach eine .bat-Datei. :-) – MarlonRibunal

+14

.bat-Dateien lösen nicht alle Windows-Probleme. Manchmal musst du sie erst mit Befehlen und Dingen füllen. – Grant

Antwort

116

Ähnlich BlackTigerX der "for", würde ich

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

+0

ist das "wenn vorhanden" erforderlich? – BlackTigerX

+3

Ja, weil das "for" so ist, dass es jedem Verzeichniseintrag "_svn" hinzufügt, wenn es den Verzeichnisbaum rekursiv aufruft. – JMD

+0

Ihre Lösung umgeht dies, indem eine explizite Liste der vorhandenen Verzeichnisse zurückgegeben wird. – JMD

14
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

+0

Ich bekomme einen Fehler: konnte nicht finden, dir-Datei, versuchte ich mit cmd.exe/c dir ..., aber ich bekomme den gleichen Fehler, aber JMD Lösung dis der Trick ... – opensas

+0

Ups, überprüfte ich die Seite Sie verlinkt, scheint wie dort, wo ein paar '' (einfache Anführungszeichen) fehlt ... beheben, dass auch den Trick gemacht ... – opensas

10

In Windows? Wenn Sie tortoiseSVN verwenden, können Sie den Befehl export verwenden, um eine Kopie des Projekts ohne die Ordner .svn/_svn zu exportieren.

+1

Sie können auch Svn-Export mit dem Befehlszeilen-Tool, ob Sie auf Windows oder nicht sind. – Parappa

+0

Ich denke, der Grund, warum Benutzer die .svn/_svn-Ordner rekursiv löschen müssen, ist, dass sie ihre lokale Arbeitskopie direkt an einen neuen Speicherort kopiert haben, um einen Ordnervergleich ihrer modifizierten Version im Vergleich zu einem sauberen Export durchzuführen. dh nachdem etwas mit der modifizierten lokalen Arbeitskopie schief geht. (Wenigstens deshalb habe ich es gebraucht. Es ist definitiv einfacher/schneller, einfach 'svn export' zu verwenden, wenn das möglich ist.) – JMD

2

hier ... mit Freecommander oder Totalcommander

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

socendani

+0

Als langjähriger TotalCommander (früher Windows Commander!) Benutzer kann ich diese Antwort nicht negativ bleiben lassen. Dies ist eine großartige, einfache Lösung für jemanden, der TC bereits installiert hat. Ich bin froh, diesen raffinierten Trick gelernt zu haben. Vielen Dank! –

+0

Die einfachste Lösung hier! – zatziky

4
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)) 

vorschlagen Ich denke du c Versuchen Sie dieses Python-Skript, das unter allen Betriebssystemen funktioniert, wenn Sie Python installiert haben. o)

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

Der erste Teil findet jeden _svn Ordner rekursiv;

21

Zeit einig PowerShell zu lernen. Force wird verwendet, um versteckte Ordner zu finden. Der zweite Teil wird verwendet, um diese Ordner und deren Inhalt zu löschen. Remove commandlet kommt mit einem praktischen "whatif" -Parameter, der eine Vorschau ermöglicht, was gemacht wird.

PowerShell ist für Windows XP und Windows Vista verfügbar. Es ist standardmäßig unter Windows 7 und Windows Server 2008 R2 vorhanden.

Es ist ein MS-Produkt, es ist kostenlos, und es rockt!

+0

Diese Lösung funktioniert perfekt auf Windows Server 2008 R2. Danke –

16

Für die Aufnahme/Aufruf aus einer Batch-Datei verwenden (etwa für Debug Entfernen und Release-Ordner):

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

Doppel % innerhalb einer Batch-Datei erforderlich als Flucht Zeichen zu arbeiten. Sonst meldet es Syntaxfehler.

Danke.

3

Eine weitere Option von SVN Forum: Verwenden Sie XCopy mit einer Datei, die die Liste der Dateien/Verzeichnisse enthält (.svn oder _svn in diesem Fall)

XCopy C:\VersionedFolder C:\UnVersionedFolder /EXCLUDE:C:\No.SVN.txt /E /C /I /F /R /Y 
+0

Oder 'ROBOCOPY', das keine Listendatei erfordert. –

Verwandte Themen