Cancellare le cartelle orfane con una sola riga di comando

Ecco un bel trucchetto postato su un blog che non seguo di solito, e che permette di cancellare tutte le cartelle vuote che ci sono sull’hard disk 🙂 .

Più che per lo script in sè questa cosa a me torna utile per migliorare tutti i miei file BATCH di pulizia e riordino. Il comando for lo conoscevo, ma sinceramente leggendo l’help di Microsoft non si capisce un cavolo 😛 , soprattutto non si capisce che è possibile usarlo per elencare efiltrare tutti i file presenti sull’HD.

Quello che non sapevo era come iterare il comando in modo che cercasse nelle sottocartelle, ok il /s del comando dir, però mai avrei pensato si potesse filtrare l’output generato col for. Figo 😀 .

In pratica per generare una lista da poter passare ad un for è sufficiente dargli l’opzione /b

Il comando da dare per cancellare tutte le cartelle vuote è:

for /f "usebackq delims=" %f in (`"dir /ad/b/s | sort /R"`) do rd "%f"

>

NOTA: faccio notare che di comando dir è racchiuso fra “accenti gravi” e non apostrofi (il codice numerico è 96).

Lo script in realtà non riesce a capire quali cartelle siano vuote o piene ma cerca di cancellarvele tutte, però, il comando rd non cancella una cartella che non sia vuota.

Se invece di cancellarle (si sa mai) volete visualizzare tutte le cartelle che avete sull’HD:

for /f "usebackq delims=" %d in (`"dir /ad/b/s | sort /R"`) do echo  "%d"

Se, come spiegato sul blog di MSDN, volete creare un file BAT (o CMD) dovete raddoppiare i %.

Con piccole modifiche, davvero piccole, è possibile usarlo per farsi una lista delle immagini sparse sull’HD, dei file MP3, oppure per cancellare gli indici di Thunderbird (vabbè con la 2.0 la cosa è meno utile di prima) e forse altro ancora 🙂 .

Questo, ad esempio, cancella tutti gli indici di TB (ogni tanto fa bene fare pulizia):

for /f "usebackq delims=" %f in (`"dir *.msf /b/s"`) do del  "%f"

NOTA: Faccio notare, che lo script iniziale è sbagliato :-P, in quanto non tiene conto degli spazi nei nomi di file/cartelle, cosa di cui mi ero accorto anch’io tentando di creare lo script per la cancellazione dei file msf e non capendo perchè non funzionasse 😛 (tutti i percorsi venivano troncati in un bel “C:\Documents”), per fortuna ci sono i commenti, l’equivalente per il blog dei Service Pack di sistema 🙂 .

Fonte: MSDN Blog

Technorati Tags: , , ,

4 Responses to “Cancellare le cartelle orfane con una sola riga di comando”


  • Internet Explorer 7.0 Windows XP

    Ciao, ottima FAQ Complimenti!Non la sapevo questa! però…..tu hai scritto:
    il comando rd non cancella una cartella che non sia vuota.
    Ma se in un file batch scrivi dapprima il comando @rd/q/s
    la cartella con tutto il suo contenuto viene eliminata definitivamente. Questo é per me un difetto grave perché
    Basterebbe un VBScript per arrecare danni al PC.
    Il mio era un commento al comando RD e la sicurezza del SO.
    Complimenti ancora!
    ZeRoHaCk

  • Mozilla Firefox 3.1b2 Windows XP

    @ZeRoHaCk,
    si hai ragione a precisare, io intendevo che quella chiamata (senza parametri opzionali) esegue la cancellazione solo se la cartella è vuota.

    Non credo sia un problema di sicurezza, uno script Batch potrebbe fare danni in molti altri modi, a volte il poter rimuovere intere cartelle – anche se non vuote – può essere pure utile, credo valga sempre la massima che il peggior virus se ne sta seduto davanti al PC, il poter fare delle cose quasi sempre a la controindicazione che si può abusare e fare danni.
    Ciao e grazie per aver commentato

  • Mozilla Firefox 3.6.3 Mac OS X 10

    Ma se volessi specificare che questa operazione venga applicata alla sola directory e sottodirectory nella quale eseguo il file batch?

    Grazie in anticipo

  • Mozilla Firefox 3.5.9 Windows XP

    Bisogna togliere l’opzione /s che è quella che ripete l’operazione nelle sottocartelle.

    Ciao

Leave a Reply