Come rimuovere le cartelle vuote automaticamente in Windows

Nel tempo, centinaia di cartelle vuote e file spazzatura potrebbero occupare il tuo disco rigido. Mentre i file spazzatura occupano spazio su disco e possono essere ripuliti utilizzando le impostazioni di Pulizia disco o Archiviazione, rimangono le directory vuote.

Le cartelle vuote non occupano spazio su disco, ma per organizzare meglio i tuoi dati, potresti volerli ogni tanto.

In questo articolo vengono descritti diversi metodi per trovare e rimuovere cartelle vuote sul computer.

Come trovare e rimuovere cartelle vuote in Windows?

Una cartella o directory vuota è quella in cui non sono presenti file o sottodirectory. Le cartelle vuote non occupano spazio su disco, ma troppe di esse possono essere un fastidio. Per trovarli e rimuoverli, utilizzare uno dei metodi seguenti.

Importante: di solito non è consigliabile eseguire uno strumento automatizzato o un file batch per eliminare in modo ricorsivo cartelle vuote nell'intera unità di sistema. Questo perché alcuni programmi potrebbero non funzionare e generare un bizzarro errore quando trova una cartella essenziale mancante. Come sempre, si applica l'avvertenza standard. Assicurarsi di disporre di backup appropriati preferibilmente su un'unità esterna, prima di manipolare il file system o il registro di Windows.

CORRELATO: Trova ed elimina i file a 0 byte in modo ricorsivo in una cartella in Windows

Cominciamo con uno strumento GUI pulito, seguito da riga di comando nativa e metodi di scripting.

1. Rimuovere le cartelle vuote utilizzando l'utilità "Trova cartelle vuote in file"

Trova file vuoti-n-cartelle è uno strumento eccellente che può trovare ed eliminare file vuoti (0 byte) e cartelle vuote ricorsivamente sotto un albero di cartelle.

Scarica Trova file vuoti-n-cartelle (programma di installazione da 600 KB) da Ashisoft.com.

Seleziona la cartella e fai clic su Scansiona ora.

Lo strumento elencherà file e cartelle vuoti in schede separate.

Fai clic su Segna tutte le cartelle, quindi fai clic su Elimina cartelle .

Allo stesso modo, per eliminare i file a 0 byte nella struttura di cartelle selezionata, fare clic sulla scheda File vuoti .

Ashisoft.com ha altri fantastici strumenti che puoi controllare!


2. Rimuovere le cartelle vuote utilizzando i comandi "for" e "rd"

È possibile utilizzare i comandi interni del Prompt dei comandi for e rd per enumerare l'elenco delle cartelle ed eliminare quelle vuote.

  1. Premi e tieni premuto il tasto Maiusc, fai clic con il pulsante destro del mouse su una cartella e fai clic qui Apri finestra di comando . In questo modo si aprirà il prompt dei comandi nella posizione corrente della cartella, che può anche verificare nella console. Nota: è necessario assicurarsi di eseguire il comando seguente dal percorso esatto della cartella principale in cui è necessario trovare e rimuovere le sottocartelle vuote.
  2. Una volta che sei nella directory desiderata nel Prompt dei comandi, esegui questa riga di comando:
     per / f "delims ="% i in ('dir / s / b / ad ^ | sort / r') do rd "% i" 2> NUL 

    Ciò elimina tutte le directory vuote attraverso le sottodirectory dal percorso della cartella di base, comprese le cartelle vuote nidificate.

La riga di comando sopra è gentilmente concessa da Raymond Chen di Microsoft, tramite il suo blog The Old New Thing. In questo post, la riga di comando di Raymond è stata leggermente modificata in modo da eliminare anche i nomi delle cartelle contenenti spazi.

Come funziona il comando

Il comando sopra elenca tutte le sottodirectory (ricorsivamente) nel percorso di base corrente e ordina l'elenco ( sort /r ) in ordine inverso. L'ordinamento inverso consiste nell'assicurarsi che l'enumerazione sia eseguita dal basso verso l'alto. Questo è importante per l'eliminazione di directory vuote, in quanto è necessario rimuovere le sottodirectory prima di rimuovere il genitore.

Quindi tenta di rimuovere l'elenco di directory (in ordine inverso) utilizzando il comando RD . Se una directory non è vuota, passa alla directory successiva e così via. Il comando 2>NUL assicura che il testo di output "directory non vuota" sia soppresso.

L'unico svantaggio del metodo sopra è che non è utile se si desidera semplicemente trovare cartelle vuote senza eliminarle. Se si desidera trovare l'elenco di cartelle vuote, utilizzare la riga di comando nel paragrafo seguente o seguire qualsiasi altro metodo descritto in questo articolo.

Trova cartelle vuote, ma non eliminare

Per trovare solo le cartelle vuote senza eliminarle, utilizzare questa sintassi della riga di comando:

 per / r "D: \ uploads \ 2019" / d% F in (.) do @dir / b "% F" | findstr "^"> nul || echo% ~ fF 

Mostra l'output contenente l'elenco di directory vuote.

Supponiamo che tu abbia cartelle nidificate vuote come questa:

 C: \ 1 └───2 └───3 └───4 

L'esecuzione del comando sopra elenca solo la cartella più vuota → 4 . Tecnicamente, è corretto perché una cartella non può essere considerata vuota se esiste una sottocartella o un file.


3. Trova e rimuovi cartelle vuote usando il comando Robocopy

Robocopy è un potente strumento di copia file incorporato che ha molte funzionalità avanzate. Abbiamo trattato Robocopy nell'articolo Confronta i contenuti di due cartelle in Windows.

Supponiamo che tu abbia una cartella chiamata cars che contiene diverse sottocartelle di cui alcune vuote. Elimineremo quelli vuoti usando Robocopy.

Il trucco qui è usare il comando di spostamento Robocopy, passando esattamente lo stesso percorso della cartella sia per l'origine che per la destinazione.

  1. Apri una finestra del prompt dei comandi
  2. Digita il seguente comando e premi INVIO:
     robocopy "d: \ tariffe automobilistiche \ automobili" "d: \ tariffe automobilistiche \ automobili" / S / mossa 

    La cosa più importante da notare qui è che i percorsi di origine e destinazione sono (deliberatamente) gli stessi. Il parametro /S indica a Robocopy di non spostare le cartelle vuote nel percorso "destinazione". Come abbiamo menzionato gli stessi percorsi per origine e destinazione, Robocopy eliminerà semplicemente le cartelle vuote a causa della presenza /S

Le cartelle vuote nel percorso scelto vengono ora cancellate.

Vuoi trovare cartelle vuote ma non cancellarle?

È possibile utilizzare l'argomento /L (solo elenco) della riga di comando con Robocopy in modo che esegua solo una prova a secco invece di eseguire l'operazione di copia / spostamento effettiva.

/L :: Solo elenco: non copiare, timestamp o eliminare alcun file.

/MOVE :: MOVE files AND dirs (elimina dalla sorgente dopo la copia).

/S :: copia le sottodirectory, ma non quelle vuote.

Puoi vedere il numero di file in una colonna e ascoltare il percorso della cartella. Gli 0 indicano che quelle cartelle non hanno file.

Mettiamo questo comando alla prova!

La mia cartella %APPDATA% è piena di cartelle vuote aggiunte da programmi obsoleti.

Prima della pulizia, la cartella Appdata \ Roaming aveva 681 cartelle, come si vede nelle proprietà della cartella.

Ho aperto il prompt dei comandi ed ho eseguito il comando seguente:

 robocopy "% appdata%" "% appdata%" / S / MOVE 

Nota: la variabile di ambiente% appdata% si traduce nella cartella C:\Users\{username}\AppData\Roaming . È possibile utilizzare il percorso completo della cartella o la variabile di ambiente equivalente con Robocopy. O va bene.

Ha rimosso con successo 94 cartelle vuote nella mia cartella %APPDATA% e sottocartelle.

Nota del redattore: nell'output della riga di comando sotto la sezione delle statistiche, è apparso il seguente errore:

“ERRORE 32 (0x00000020) Eliminazione della directory di origine C: \ Users \ ramesh \ AppData \ Roaming \

Il processo non può accedere al file perché è utilizzato da un altro processo. "

Poiché abbiamo chiesto a Robocopy di spostare ( /MOVE ) la directory% APPDATA%, lo strumento stava provando a ripulire la cartella "sorgente" dopo averla "spostata" nella destinazione. Non è stato possibile, poiché% APPDATA% è una cartella speciale. L'errore non si verifica quando viene utilizzato un percorso di directory che non è una cartella speciale. Dato che tutto è andato bene, ho semplicemente ignorato l'errore (banale).


4. Trova e rimuovi cartelle vuote usando PowerShell

La seguente riga di comando di PowerShell elimina ricorsivamente le cartelle vuote che si trovano nella cartella di base specificata.

  1. Avviare PowerShell e digitare il comando seguente:
     (gci "percorso cartella" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Count -eq 0} | Rimuovi oggetto 

    Sostituisci "percorso cartella" con la posizione della cartella base. Ad esempio, sto specificando la cartella Roaming qui:

     (gci "C: \ Users \ ramesh \ AppData \ Roaming" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Count -eq 0} | Rimuovi oggetto 

    Ciò elimina ricorsivamente tutte le sottocartelle vuote nella mia cartella %appdata% e non mostra alcun output, a meno che non si verifichino errori.

Si noti che il comando PowerShell sopra cancella solo l'ultimo livello della cartella nidificata vuota. Ad esempio, supponiamo di avere cartelle nidificate vuote come questa:

 C: \ 1 └───2 └───3 └───4 

L'esecuzione del comando sopra cancella la cartella più vuota → 4 . L'esecuzione dello script di nuovo cancellerà un altro livello di una cartella nidificata ( 3 ) e così via.

È possibile utilizzare lo script PowerShell nella Wiki PowerShell Tech di Svendsen per lavorare con le cartelle nidificate.

In alternativa, è possibile utilizzare il metodo successivo, una soluzione di script di Windows per cancellare ricorsivamente tutte le cartelle vuote, comprese quelle nidificate.

Trova cartelle vuote, ma non vuoi cancellarle?

Vuoi ottenere l'elenco di cartelle vuote, ma non vuoi eliminarle? Utilizzare invece questo esempio da riga di comando:

 (gci "C: \ Users \ ramesh \ AppData \ Roaming" -r |? {$ _. PSIsContainer -eq $ True}) | ? {$ _. GetFileSystemInfos (). Count -eq 0} | selezionare FullName | Out-GridView 

Il comando genera l'elenco di cartelle vuote con percorsi completi verso un controllo vista griglia.

Suggerimento: nella vista griglia, è possibile selezionare tutto e copiare la selezione premendo Ctrl + C

È una buona idea visualizzare in anteprima l'elenco prima di eseguire il comando per eliminare le cartelle.


5. Trova e rimuovi cartelle vuote utilizzando Windows Scripting

Il dipendente Microsoft Jeremy Jameson ha scritto un VBScript che elimina ricorsivamente cartelle vuote. Ho aggiunto più righe nello script in modo che elimini forzatamente le directory vuote di sola lettura, produca l'elenco aggregato di cartelle vuote. Emette inoltre un elenco di cartelle vuote che non è stato possibile eliminare, insieme alla corrispondente descrizione dell'errore.

Lo script è in grado di eliminare le directory vuote nidificate nelle sottocartelle.

 Opzione esplicita If (WScript.Arguments.Count 1) Quindi WScript.Echo ("Uso: cscript DeleteEmptyFolders.vbs {path}") WScript.Quit (1) End If Dim strPath: strPath = WScript.Arguments (0) Dim fso: Set fso = CreateObject ("Scripting.FileSystemObject") Dim objFolder: Set objFolder = fso.GetFolder (strPath) Dim sDelList, sDelErr, sFolderPath Dim iCnt iCnt = 0 DeleteEmptyFolders objFolder Sub DeleteEmptyFolder quando si accede a Giunzioni, ecc. Per ogni sottocartella Nella cartella.SubFolders EliminaEmptyFolders sottocartella Avanti In Errore Vai 0 Se cartella.SubFolders.Count = 0 E folder.Files.Count = 0 Quindi sFolderPath = folder.Path In caso di errore Riprendi cartella successiva fso.DeleteFolder .Path, True If Err.number 0 Quindi sDelErr = sDelErr & Err.number & ":" & Err.description & _ vbCrLf & sFolderPath & vbCrLf & vbCrLf Else sDelList = sDelList & vbCrLf & sFolderPath t = iCnt + 1 End If On Error Vai 0 End If End Sub If sDelList = "" E sDelErr = "" Quindi WScript.Echo "Nessuna cartella vuota trovata sotto" & _ "" "" & strPath & "" "" & "tree" WScript.Quit End If If sDelList "" then sDelList = "Elenco di cartelle vuote cancellate" & vbCrLf _ & String (38, "-") & vbCrLf & sDelList & vbCrLf & _ vbCrLf & "Total:" & iCnt e "cartelle eliminate". Se sDelErr "" allora sDelErr = "Queste cartelle non possono essere eliminate" & _ vbCrLf & String (45, "-") & vbCrLf & sDelErr WScript.Echo sDelList & vbCrLf & vbCrLf & sDelErr 

Copia il codice sopra in Blocco note e salva il file con estensione .vbs, ad esempio delempty.vbs .

Puoi eseguire lo script in 2 modi:

tramite il prompt dei comandi, eseguendo:

 cscript.exe delempty.vbs "percorso_cartella" 

tramite GUI, eseguendo:

 wscript.exe delempty.vbs "percorso_cartella" 

tramite il menu Invia a

È possibile creare un collegamento allo script nella cartella SendTo e denominarlo come Elimina cartelle vuote .

Quindi, fai clic con il pulsante destro del mouse su una cartella in cui desideri eliminare le sottocartelle vuote ricorsivamente → fai clic su Invia a → fai clic su Elimina cartelle vuote nel menu Invia a.

Vedrai l'elenco delle cartelle vuote cancellate e il totale e le cartelle che non potevano essere eliminate con i rispettivi codici di errore visualizzati.

Questo è tutto! Se conosci altri metodi per rimuovere le cartelle vuote in Windows, sappi che nella sezione commenti qui sotto.

Articoli Correlati