2013-01-17 15:33:22 +0000 2013-01-17 15:33:22 +0000
59
59

Cancellare completamente una cartella in Windows usando la riga di comando

Devo cancellare una cartella contenente altre cartelle e file all'interno. Ho provato i comandi del e rmdir ma a volte non riescono con alcune linee di errore: [PATH]: The directory isn't empty.

C'è una buona alternativa?

Risposte (8)

58
58
58
2013-01-17 15:38:19 +0000

Provare:

rmdir /S your_directory
``` ```
rmdir /S /Q your_directory

o:

&001 &001

per saltare i messaggi di conferma.

16
16
16
2013-07-16 16:23:26 +0000

Questo mi succede spesso con i miei script di compilazione automatica.

Immagino che la ragione potrebbe essere qualche applicazione che ha un file aperto in quella directory con “share delete”. Vale a dire che l'applicazione permette la cancellazione del file (ecco perché immagino che la chiamata DeleteFile non fallisca), ma il file scomparirà solo dopo che tale applicazione avrà chiuso la sua gestione.

Ciò significa che il file potrebbe essere ancora lì quando il comando rmdir cerca di cancellare la cartella, da cui il messaggio di errore. Poco dopo, detta applicazione chiuderà il suo handle, il file scomparirà, e quando si controlla la cartella per vedere quale file rmdir ne parlava sarà vuoto.

Almeno questa è la mia teoria.

La soluzione proposta da Harry Johnston sembra buona. Solo che inserirei una pausa tra i comandi di rmdir. Naturalmente Windows non ha un comando “pausa” facilmente scrivibile (correzione: le vecchie versioni di Windows non lo fanno, le nuove lo fanno - vedi commenti). Ma se la granularità dei secondi è sufficiente si può usare ping per creare una pausa:

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Quindi in totale:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}
11
11
11
2013-01-17 16:27:07 +0000

Potreste avere alcuni file di sola lettura, potete usare l'opzione del /F per eliminarli usando

del /S /F your_directory
     rmdir your_directory
``` ```
del /S /F /AH your_directory
     rmdir your_directory

Potreste anche avere alcuni file nascosti e se siete veramente sicuri di volerli eliminare, allora potete farlo usando

&001 &001

Se questo ancora non riesce, allora o non avete il permesso di eliminare alcuni file, o alcuni dei file sono ancora in uso.

5
5
5
2013-01-17 22:34:36 +0000

Credo che ci sia un bug in Windows 7 (e forse in altre versioni) che a volte causa questo sintomo; oppure potrebbe essere un bug in software di terze parti. (Per caso avete installato Symantec Endpoint Protection?)

Comunque, l'ho incontrato abbastanza spesso. Nella maggior parte dei casi, il problema può essere risolto eseguendo rd /s /q due o tre volte di seguito.

Se questo è in un file batch, si può fare qualcosa del genere:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause
3
3
3
2013-01-17 15:36:33 +0000

Usare del sui file all'interno, poi rmdir per rimuovere la cartella.

Per usare il metodo rmdir anche per rimuovere tutti i file, usare l'interruttore /S prima del nome della directory, e /Q per sopprimere la richiesta di cancellazione. Questo è il modo migliore per farlo, poiché non si perde alcun file. Fate attenzione però ad usare lo switch /Q, perché non vi avviserà degli attributi di sistema o dei file nascosti

2
2
2
2017-12-01 18:08:45 +0000

Se si usa node si può usare la dipendenza rimraf in questo modo:

run install: npm install rimraf -g

delete folder: rimraf SourceFolder

Questo mi ha aiutato ad ottenere l'errore:

i nomi dei file sorgente sono più grandi di quelli supportati dal file system

0
0
0
2015-11-16 14:47:29 +0000

Penso che si possa usare così:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"
0
0
0
2016-06-24 18:30:12 +0000

Le versioni precedenti di Windows (DOS, Windows 95/98/ME), DELTREE è l'equivalente di RM o RMDIR. Io uso DELTREE sulla mia postazione di lavoro di Windows 7 in file batch, ma va bene lo stesso.

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.