Ich benötige eine Möglichkeit, einen Ordner und seine Unterordner rekursiv zu löschen.
Gibt es dafür ein vorgefertigtes Tool, oder muss ich eines schreiben?
DEL /S
löscht keine Verzeichnisse.
DELTREE
wurde aus Windows 2000+ entfernt
Ich benötige eine Möglichkeit, einen Ordner und seine Unterordner rekursiv zu löschen.
Gibt es dafür ein vorgefertigtes Tool, oder muss ich eines schreiben?
DEL /S
löscht keine Verzeichnisse.
DELTREE
wurde aus Windows 2000+ entfernt
Als Sidenode:
Von der Linux-Version mit allen Unterverzeichnissen (rekursiv) + Löschen erzwingen
$ rm -rf ./path
zur PowerShell
PS> rm -r -fo ./path
die fast die gleichen Parameter hat (nur getrennt) (-fo wird benötigt, da -f mit verschiedenen anderen Parametern übereinstimmen könnte)
Anmerkung:
Remove-Item ALIASE
ri
rm
rmdir
del
erase
rd
In der Powershell ist rm ein Alias von Remove-Item
so entfernen Sie eine Datei,
rm -R -Fo the_file
ist gleichbedeutend mit
Remove-Item -R -Fo the_file
wenn Sie sich mit Gnu wohl fühlen rm
nutzen, können Sie die rm
verwendet von choco Paketmanager unter Windows.
gnu utils in powershell installieren mit choco
:
choco install GnuWin
endlich,
rm.exe -rf the_file
Zunächst sollten wir uns ansehen, was rm -rf
tut:
C:\Users\ohnob\things>touch stuff.txt
C:\Users\ohnob\things>rm -rf stuff.txt
C:\Users\ohnob\things>mkdir stuff.txt
C:\Users\ohnob\things>rm -rf stuff.txt
C:\Users\ohnob\things>ls -l
total 0
C:\Users\ohnob\things>rm -rf stuff.txt
Es gibt drei Szenarien, in denen rm -rf
wird üblicherweise verwendet, wenn erwartet wird, dass es 0
:
Ich werde die ganze Sache mit den Zugriffsrechten ignorieren, aber niemand verwendet Zugriffsrechte oder versucht, sich selbst den Schreibzugriff auf Dinge in Windows zu verweigern (OK, das sollte ein Witz sein ).
Erste einstellen. ERRORLEVEL
auf 0 und löschen Sie den Pfad nur, wenn er existiert, wobei unterschiedliche Befehle verwendet werden, je nachdem, ob es sich um ein Verzeichnis handelt oder nicht. IF EXIST
setzt nicht ERRORLEVEL
auf 0 gesetzt, wenn der Pfad nicht existiert, so dass das Setzen des ERRORLEVEL
auf 0 zu setzen, ist notwendig, um den Erfolg auf eine Art und Weise zu erkennen, die den normalen Zustand nachahmt. rm -rf
Verwendung. Die Bewachung der RD
con IF EXIST
ist notwendig, weil RD
im Gegensatz zu rm -f
gibt einen Fehler aus, wenn das Ziel nicht existiert.
Der folgende Skriptausschnitt geht davon aus, dass DELPATH in Anführungszeichen gesetzt ist. (Dies ist sicher, wenn Sie etwas tun wie SET DELPATH=%1
. Versuchen Sie, die ECHO %1
in einem .cmd
und übergeben Sie ihm ein Argument mit Leerzeichen und sehen Sie selbst, was passiert). Nachdem das Snippet abgeschlossen ist, können Sie den Fehler mit IF ERRORLEVEL 1
.
: # Determine whether we need to invoke DEL or RD or do nothing.
SET DELPATH_DELMETHOD=RD
PUSHD %DELPATH% 2>NUL
IF ERRORLEVEL 1 (SET DELPATH_DELMETHOD=DEL) ELSE (POPD)
IF NOT EXIST %DELPATH% SET DELPATH_DELMETHOD=NOOP
: # Reset ERRORLEVEL so that the last command which
: # otherwise set it does not cause us to falsely detect
: # failure.
CMD /C EXIT 0
IF %DELPATH_DELMETHOD%==DEL DEL /Q %DELPATH%
IF %DELPATH_DELMETHOD%==RD RD /S /Q %DELPATH%
Der Punkt ist, dass alles einfacher ist, wenn die Umgebung einfach mit POSIX konform ist. Oder wenn Sie ein minimales MSYS installieren und nur dieses verwenden.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.