Consulenza informatica in marketing web, networking e computer

Eliminare cartelle vuote da Windows con un comando CMD

0 17

Chi lavora spesso con Windows, script batch o il Prompt dei comandi può trovarsi ad avere strutture di directory piene di cartelle ormai inutili e vuote. Esiste un comando che permette di tentare la rimozione automatica di tutte le cartelle, partendo da quelle più interne fino ad arrivare a quelle superiori.

Il comando è il seguente:

for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

È importante capire che questo comando non elimina i file. Il comando rd (Remove Directory) riesce infatti a eliminare solo le cartelle vuote. Se una cartella contiene ancora file o sottocartelle non eliminate, l’operazione fallisce per quella directory.

A cosa serve

Questo comando viene utilizzato principalmente per:

  • eliminare automaticamente tutte le cartelle vuote presenti in una directory e nelle sue sottocartelle;
  • ripulire alberi di directory dopo aver cancellato file;
  • automatizzare operazioni di manutenzione tramite script batch;
  • semplificare la pulizia di backup o cartelle temporanee.

Un aspetto fondamentale è che le cartelle vengono elaborate dal livello più profondo verso quello più alto. Questo consente di eliminare anche le cartelle che diventano vuote solo dopo la rimozione delle sottocartelle.


Analisi del comando

Il comando completo è:

for /f "delims=" %d in ('dir /s /b /ad ^| sort /r') do rd "%d"

Vediamolo pezzo per pezzo.

1. for /f

for /f

for è il comando che permette di eseguire un ciclo.

L’opzione /f indica che il ciclo deve leggere un flusso di testo, che può provenire da:

  • un file;
  • una stringa;
  • l’output di un altro comando.

In questo caso l’output proviene dal comando racchiuso tra parentesi.

2. "delims="

"delims="

Per impostazione predefinita for /f divide ogni riga in colonne usando spazi e tabulazioni come separatori.

Con:

delims=

si dice invece di non usare alcun delimitatore.

In questo modo ogni riga viene letta integralmente.

Questo è fondamentale perché i percorsi delle cartelle possono contenere spazi, ad esempio:

C:\Program Files\Applicazione

Senza delims= il percorso verrebbe spezzato in più parti.

3. %d

%d

È la variabile del ciclo.

Ad ogni iterazione contiene il percorso completo di una cartella.

Ad esempio:

Prima iterazione:

%d = C:\Lavoro\Progetto\Temp

Seconda iterazione:

%d = C:\Lavoro\Progetto

e così via.

Se il comando viene inserito in un file .bat o .cmd, la variabile deve essere scritta come %%d.

4. in (...)

in (...)

Specifica da dove il ciclo deve leggere i dati.

In questo caso:

('dir /s /b /ad ^| sort /r')

viene eseguito un altro comando e il suo output viene passato al ciclo.

5. dir /s /b /ad

Questo comando genera l’elenco delle cartelle.

Analizziamo le opzioni.

/s

/s

Cerca ricorsivamente in tutte le sottocartelle.

/b

/b

Formato “bare”, cioè essenziale.

L’output contiene soltanto il percorso completo.

Ad esempio:

C:\Test
C:\Test\A
C:\Test\A\B

Senza intestazioni, date o altre informazioni.

/ad

/ad

Mostra soltanto le directory.

I file vengono ignorati.

6. ^|

^|

Il simbolo | è la pipe di Windows.

Poiché si trova all’interno del comando usato da for, viene preceduto dal carattere ^, che serve come carattere di escape.

In pratica il comando eseguito diventa:

dir /s /b /ad | sort /r

7. sort /r

sort /r

Ordina l’elenco in ordine inverso.

Questo è il passaggio più importante.

Supponiamo di avere:

C:\Test
C:\Test\A
C:\Test\A\B

Con sort /r otteniamo:

C:\Test\A\B
C:\Test\A
C:\Test

In questo modo vengono elaborate prima le cartelle più profonde.

8. do

do

Introduce il comando da eseguire per ogni elemento del ciclo.

9. rd "%d"

rd "%d"

rd significa Remove Directory.

Per ogni percorso:

C:\Test\A\B

viene eseguito:

rd "C:\Test\A\B"

Le virgolette permettono di gestire correttamente i percorsi che contengono spazi.

Perché l’ordinamento inverso è indispensabile

Supponiamo questa struttura:

Backup
└── 2024
    └── Marzo

Tutte le cartelle sono vuote.

Se il comando provasse prima a eliminare:

Backup

l’operazione fallirebbe perché contiene ancora 2024.

Con l’ordinamento inverso avviene invece:

Backup\2024\Marzo

viene eliminata.

Poi:

Backup\2024

ora è vuota e viene eliminata.

Infine:

Backup

è diventata vuota e può essere eliminata.

Questo approccio garantisce che ogni cartella venga rimossa solo quando non contiene più sottocartelle.

Considerazioni finali

Questo comando rappresenta un esempio elegante di composizione di strumenti della shell di Windows: dir produce l’elenco delle directory, sort ne inverte l’ordine, for /f itera sui risultati e rd tenta la rimozione di ciascuna cartella. Il risultato è una procedura compatta ed efficace per eliminare automaticamente le cartelle vuote all’interno di una struttura di directory, senza intervenire sui file presenti.

Lascia una risposta

L'indirizzo email non verrà pubblicato.

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.