TechNet Team Blog Austria

Informationen und News abseits der offiziellen TechNet vom TechNet Team Blog Austria

Wie löscht man sehr tiefe Verzeichnisse?

Wie löscht man sehr tiefe Verzeichnisse?

  • Comments 4
  • Likes

Ich mag robocopy. Ich mag robocopy wirklich (siehe u.a. windowsblog.at Robocopy - Mein Lieblingstool für Kopieren und Backup). Es hat nur einen Nachteil: Es tut, was man ihm sagt…!

Wie so oft saß das Problem vor dem Computer: Vor Weihnachten sitze ich vor meinem Notebook und will noch “rasch” ein paar Daten von meinem SBS2008 aufs Notebook mitnehmen. Also robocopy anwerfen: Die Daten sind in meinem Laufwerk H: und ich kopiere sie in mein lokales Verzeichnis C:\Daten\H:

!! NICHT NACHMACHEN !! ;-)

robocopy H:\ H:\Daten\H /s /MIR (… und sonst noch die üblichen Schalter wie /R:3 /W:3 etc…)

ENTER. Der Befehl arbeitet einige Zeit und erzeugt viel Copy-Output.
Moment mal, da stimmt doch was nicht!

Ich $&}$%! Die Finger waren schneller als das Hirn, das angegebene Ziel war ja die Quelle H:\Daten… statt C:\Daten\H !!! Abbrechen und nachsehen, was da passiert ist:

dirs-endlos

Super, robocopy hat wirklich getan, was ich beauftragt habe: Das Verzeichnis H:\ rekursiv in sich selbst kopiert!

Na gut, halb so schlimm. Dann wechsle ich mal auf den Server und lösche eben mal die Daten und Verzeichnisse, oder?

Also, Das Verzeichnis am Server lautet D:\Daten\H. Und hier drin die ewige Verzeichnisstruktur. Damit ich versehentlich nichts kaputt mache – da sind ja noch mehr Daten drauf! - benenne ich das zu löschende Verzeichnis um: Aus D:\Daten\H\Daten wird gleich mal D:\Daten\H\x und da drin das erste Verzeichnis x1 – so fühle ich mich irgendwie “sicherer”.

Kommandozeile öffnen und versuchen in D:\Daten\H\x\x1 die Daten und die Verzeichnisse zu löschen:

del daten /S /F /Q

dirs-delete

Hm. Klappt nicht. Genauso wenig klappt das Löschen der Verzeichnisse mit rd:

dirs-rd

Blöd. Na gut, dann versuchen wir es mal mit PowerShell:

dirs-delete-ps

Genau dasselbe Ergebnis… next attempt: vielleicht geht es mit Rekursion?

dirs-delete-ps-recursive

Wieder nichts! Langsam steigt ein ungutes Gefühl in mir auf…

Zwei Tage später: Jetzt zu den Feiertagen kann ich mich ja wieder darum kümmern und versuchen, den “Datenmüll” wieder zu entfernen. Wie bekomme ich diesen tiefen Verzeichnispfad wieder weg?

Wahrscheinlich habe ich nicht die richtigen Suchbegriffe in die Suchmaschinen eingetippt, denn ich habe nichts (rasch) brauchbares gefunden…

Ich überlege, mir ein winziges Programm zu schreiben, das rekursiv in das letzte Verzeichnis wechselt und dort alles löscht, dann eine Ebene höher geht usw. Aber das wird wohl auch nicht funktionieren, denn beim Löschen beschwert sich das Dateisystem ja immer, dass die Verzeichnistiefe zu groß ist. Dann wird Löschen auch nicht gehen.

Oder Umbenennen aller Verzeichnisse in den kürzest möglichen Pfad, z.B. “1” – aber automatisiert, denn sonst sitze ich morgen noch da: D:\Daten\H\x\x1\1\1\1\1\1\1\1\1\1\1\1\1 …

Oder… moment mal: Wenn robocopy den coolen Schalter /MIR kann (löscht am Ziel-Verzeichnis alles und “snychronisiert” das Quell-Verzeichnis vollständig in das Zielverzeichnis), dann kann es vielleicht auch die so angelegte Verzeichnistiefe wieder löschen??

Probieren wirs: Ich verwende ein Verzeichnis mit nur einer Datei drin aus D:\Temp, um ein “Dummy-Copy” ins Ziel durchzuführen:

robocopy D:\Temp D:\Daten\h\x /MIR /s /r:1 /w:1

Ok, alle Fenster schließen, damit die Verzeichnisse nicht gelockt sind und den Befehl mehrmals ausführen – es klappt!

Den kompletten Output erspare ich uns, aber es sieht etwa so aus:

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Robustes Dateikopieren für Windows

-------------------------------------------------------------------------------

           Gestartet: Fri Dec 25 15:59:42 2009

             Quelle : d:\temp\
               Ziel : d:\daten\h\x\

            Dateien : *.*

            Optionen: *.* /S /COPY:DAT /PURGE /MIR /R:1 /W:1

------------------------------------------------------------------------------

                           1    d:\temp\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\h\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\h\daten\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\h\daten\h\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\h\daten\h\daten\
        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\h\daten\h\daten\h\

        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\h\daten\h\daten\h\

        *ZUS. Verz.       -1    d:\daten\h\x\x1\daten\h\daten\h\daten\h\daten\h\
daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\
daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\h\daten\

------------------------------------------------------------------------------

                Gesamt   Kopiert  Überspr. Nicht gef.  Fehler    Extras
Verzeich.:         1         0         1         0         0        48
   Dateien:         1         0         1         0         0         0
     Bytes:       215         0       215         0         0         0
    Zeiten:   0:00:00   0:00:00                       0:00:00   0:00:00

   Beendet: Fri Dec 25 15:59:43 2009

Wieder was gelernt!

Erstens: Kurz Hirn einschalten, bevor man so praktische Tools wie robocopy verwendet und zweitens ist oft der Auslöser die Lösung…

In meinem Fall kann robocopy auch wunderbar zum Löschen von so tiefen Verzeichnissen verwendet werden, wo das Betriebssystem “die Patschen streckt”. ;-)

In diesem Sinne: Robocopy ist super. Und erholsame Feiertage!

Beitrag von Toni Pohl

Comments
  • cool, solche Leichen hab ich auch. Endlich kann ich aufräumen :-)

  • begeisternd ... es kann aber nicht "das Filesystem" sein, da dieses ja die tiefen Bäume korrekt speichert (wie ich es von ihm erwarte),

    es sind doch wohl einige Steinzeit-APIs, die einen auf 248 Zeichen einschränken !

    Die Schattenseite davon, dass Windows auch noch Software aus der Steinzeit ausführen kann... schade nur, dass sogar in der Powershell diese APIs verwendet werden :-(

  • das problem ist, das MAX_PATH (260 zeichen nicht 248; 255 + 4(für "\\?") und ein terminierendes '\0' = 260) in vielen strukturen (zb. strings mit fester länge) verwendet wird. 260 zeichen war offenbar ein kompromis beim design von windows nt zwischen leistung und speicherverbrauch.

    wenn man die wide-character-apis und das präfix "\\?\" verwendet, kann ein pfad bis zu ~32000 zeichen lang sein - hat allerdings den nachteil, dass man keine realativen pfade auflösen kann. (aja, bei autoit3 reicht es das präfix zu verwenden). - steht ansich alles im msdn "filesystem: naming a file" oder so.

    damit ich bei meinen programmen keine probleme habe, arbeite ich bei meiner 'source-lib' grundsätzlich mit dem präfix.

    was ich nicht verstehe ist, dass ms nicht auch eine source-lib hat oder sonst irgendeine oben-drüber-api (zb. die ganzen shell-apis), die eine einfache abfrage machen: wenn >256 zeichen, dann verwende präfix... - da das nicht der fall ist, können defacto alle windows-standard programme damit nicht umgehen (inkl explorer).

    ich hab mir mal ein "deltree" programmiert - auch aus 'faulheit' ständig /f/s/q anzugeben ;)

    dieser simple workaround ist trotzdem gut!

  • Hi

    dies ist ein toller Bericht wlecher das Problem sehr gut aufzeigt.

    Es gibt eine Alternativ-Lösung.

    +++++++++++++++++++++++++++++++++++++++++++++

    LINUX hat diese Grenze mit der Größe/Länge der Dateipfade nicht.

    1.

    "ubuntu" aus dem web herunterladen

    2.

    Image-CD brennen

    3.

    Rechner starten mit dieser CD

    4.

    Datei löschen.

    Klappt prima. Ich hatte eine Verzeichnistiefe von weit über 600. Allerdings Gelduld nicht verlieren, das  d a u e r t wirklich einige Zeit.

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment