21. August 2017
Normalerweise schreiben wir ja primär über Datenrettung.
Diesmal möchte ich eine Lösung anbieten für Datenlöschen. Viele werden das Problem kennen – man will rekursiv Dateien und Verzeichnisse löschen, jedoch ist die gesamte Länge des Verzeichnis- und Dateinamens zu lang.
Typische Fehlermeldungen:
Die Fehlermeldungen treten typischerweise im Explorer oder am Command-Prompt CMD bzw. DOS-Fesnter auf.
Anbei eine Lösung, wie man Verzeichnisse sowie Dateien inklusive Unterverzeichnissen löschen kann, auch wenn zu lange Dateinamen und zu lange Verzeichnisnamen vorhanden sind.
WARNUNG!
Das Beispiel-Script bzw. die Beispiel-Batch-Datei löscht DATEN und VERZEICHNISS! Bei nicht korrekter Verwendung oder aufgrund möglicher Fehler innerhalb des Scripts ist es möglich, das Daten oder Verzeichnisse gelöscht werden, welche man nicht löschen will!
Das Script soll nur als Vorlage dienen, und auf keinen Fall ungeprüft eingesetzt werden. Der Inhalt muss vom Benutzer zu 100% verstanden werden, bevor es eingesetzt wird!
@echo off echo. echo WARNING! THIS PROGRAM *DELETES* FILES AND DIRECTORIES! echo RUN ONLY IF YOU HAVE FULL BACKUP OF ALL DEVICES! echo THIS PROGRAM MAY HAVE ERRORS LEADING TO DATA LOSS! echo STOP NOW - DO NOT RUN :-) ! echo. pause echo. echo RUN cmd AS ADMINISTRATOR ! (if not done already) echo. pause echo. echo ATTINGO TOO LONG DIRECTORY NAME TOO LONG FILE NAME RECURSIVE DEL RMDIR echo COPYRIGHT (C) 2017 BY ATTINGO DATENRETTUNG / NICOLAS EHRSCHWENDNER echo. pause echo. echo S T O P ! ! ! DO NOT RUN ! ! ! ! ! DANGER ! ! ! ! ***P***A***N***I***C*** :-) echo. echo CLOSE WINDOW NOW !!! echo. pause echo we are in the directory: cd echo. echo WARNING! maybe we delete too much if there are symlinks, junctions, a.s.o.!!! echo. pause. echo. echo now trying to delete everything, please ignore "too long" error messages... echo. pause echo. for /d %%d in (*) do ( echo rmdir /s/q "%%d" rmdir /s/q "%%d" ) echo. echo now renaming remaining directories to numbers, so we short them... echo. pause. echo. setlocal enableDelayedExpansion set /a j=1 for /d /r %%d in (*) do ( echo ren "%%d" "!j!" ren "%%d" "!j!" set /a "j=!j!+1" ) echo. echo now retrying to delete everything... now there should be no "too long" error message... echo. pause for /d %%d in (*) do ( echo rmdir /s/q "%%d" rmdir /s/q "%%d" ) echo. echo done? :-) echo. pause
Anbei nochmals das Script in Kurzform, wie gesagt, es soll nur als Vorlage dienen und auf keinen Fall 1:1 kopiert und verwendet werden:
removeme for /d %%d in (*) do ( removeme rmdir /s/q "%%d" removeme ) removeme setlocal enableDelayedExpansion removeme set /a j=1 removeme for /d /r %%d in (*) do ( removeme ren "%%d" "!j!" removeme set /a "j=!j!+1" removeme ) removeme for /d %%d in (*) do ( removeme rmdir /s/q "%%d" removeme )