[Cmd] RM-rf equivalente per Windows?


Answers

admin:

takeown /r /f folder
cacls folder /c /G "ADMINNAME":F /T
rmdir /s folder

Funziona per qualsiasi cosa, inclusi i file sys

EDIT: in realtà ho trovato il modo migliore che risolve anche il problema del file path troppo lungo:

mkdir \empty
robocopy /mir \empty folder
Question

Ho bisogno di un modo per cancellare in modo ricorsivo una cartella e i suoi figli, c'è uno strumento precostruito per questo, o devo scriverne uno?

DEL / S non cancella le directory.

DELTREE è stato rimosso da Windows 2000+




rmdir /S /Q %DIRNAME%




rmdir / s dirname




Innanzitutto, esaminiamo cosa fa rm -rf :

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

Esistono tre scenari in cui rm -rf è comunemente utilizzato dove si prevede di restituire 0 :

  1. Il percorso specificato non esiste.
  2. Il percorso specificato esiste ed è una directory.
  3. Il percorso specificato esiste ed è un file.

Ignorerò l'intera faccenda dei permessi, ma nessuno usa permessi o cerca di negare a se stessi accesso in scrittura su cose in Windows comunque (OK, è stato pensato per essere uno scherzo ...).

Impostare prima ERRORLEVEL su 0 e quindi eliminare il percorso solo se esiste, utilizzando comandi diversi a seconda che si tratti di una directory. IF EXIST non imposta ERRORLEVEL su 0 se il percorso non esiste, per cui è necessario impostare ERRORLEVEL su 0 per rilevare correttamente il successo in modo da simulare il normale utilizzo di rm -rf . La protezione RD con IF EXIST è necessaria perché RD , diversamente da rm -f , genera un errore se il target non esiste.

Il seguente snippet di script presuppone che DELPATH sia prequotizzato. (Questo è sicuro quando fai qualcosa come SET DELPATH=%1 Prova a mettere ECHO %1 in un file .cmd e passandogli un argomento con spazi al suo interno e guarda cosa succede per te stesso). Una volta completato lo snippet, è possibile verificare la presenza di errori con 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%

Il punto è che tutto è più semplice quando l'ambiente è conforme a POSIX. O se si installa un MSYS minimo e lo si usa.




Puoi installare cygwin, che ha rm e ls ecc.




È possibile installare GnuWin32 e utilizzare i comandi * nix in modo nativo su Windows. Lo installo prima di installare qualcos'altro su una copia nuova di Windows. :)







ecco cosa ha funzionato per me:

Prova a diminuire la lunghezza del percorso. vale a dire: rinominare tutte le cartelle che portano a un tale file ai nomi più piccoli possibili. Dì i nomi di una lettera. Vai a rinominare verso l'alto nella gerarchia delle cartelle. Con ciò si riduce efficacemente la lunghezza del percorso. Ora finalmente prova a cancellare il file subito.




Links