Come creare file batch che eliminano ricorsivamente tutte le cartelle denominate `bin` o` obj`?


31

Ho la necessità di eliminare tutti bine objcartelle in una cartella sul mio PC. Quindi, sto pensando a un file batch per farlo, ma non ho familiarità con il file batch in Windows. Per favore aiuto.

[Modificare]

Dopo una discussione con l'utente DMA57361, sono arrivato alla soluzione attuale (comunque ho ancora problemi, vedi i nostri commenti):

Crea un file .bat e incolla il comando seguente:

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"

O

start for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

@ DMA57361: quando eseguo lo script, viene visualizzato l'errore seguente. Qualche idea?

testo alternativo


@Nam - perché stai correndo for \/d \/r ...- perché le doppie barre invece di for /d /r ...? Ed eseguendo la versione "completa" con /qalla fine - come dichiaro - elimina tutto senza preavviso, quindi non restituisce alcun output (cioè, non ti dice quando funziona, solo quando ha un errore), sei sicuro che il secondo correre sopra non ha funzionato correttamente?
DMA57361,

@Nam anche questa corsa non è la stessa - nell'immagine con cui inizia il tuo comando for / %d in e non for /d /r . %d in- devi usare l' intero comando qui sotto, ogni bit ha una funzione diversa ed è importante.
DMA57361,

@Nam Opps, le mie scuse, hai perfettamente ragione, non stampa i primi interruttori! Tuttavia, non genera questo errore e sembra funzionare correttamente, per me. Hai provato semplicemente a eseguire il comando dalla riga di comando, invece di provare a eseguirlo da un file batch?
DMA57361,

Hmm, che strano. Forse il tuo Win7 sta facendo qualcosa di diverso con il batch rispetto al mio WinXP, quindi, non sono sicuro di cosa. Stasera potrò controllare Win7 a casa, altrimenti temo di essere bloccato al momento ...
DMA57361

In realtà, prova con il prefisso del comando batch con starte vedi cosa succede. Non è l'ideale, ma mi chiedo se possa essere d'aiuto.
DMA57361,

Risposte:


42

In precedenza è stato risposto su Stack Overflow, da cui ho tratto la spinta principale di questa risposta.

Prova il seguente comando, puoi eseguirlo dall'interno cmd:

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s/q "%d"

Se è necessario modificare altre cartelle, aggiungere semplicemente nuovi elementi al (bin,obj)set nel mezzo del comando.

Questo eliminerà tutto ciò che corrisponde senza preavviso e senza usare il cestino - quindi, se vuoi un po 'di sicurezza in più, lascia cadere /qla chiamata alla rdfine e il sistema dovrebbe chiederti prima di ogni eliminazione.

for /d /r . %d in (bin,obj) do @if exist "%d" rd /s "%d"

Se si intende eseguire il comando da un file batch , sarà necessario sostituire ogni istanza della variabile %dcon %%d, in questo modo:

for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
OR
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s "%%d"

Secondo la conversione aveva nella domanda commenti

Se il comando si rifiuta di essere eseguito in un file batch (impossibile replicare qui), provare con il prefisso start. Sebbene questo avvii il processo in modo che venga eseguito contemporaneamente al file batch, il che può causare altri problemi, sembra più probabile che funzioni correttamente.

Inoltre, se si dispone di file con nome objo binall'interno dell'albero delle cartelle su cui sta lavorando il comando, verrà visualizzato un messaggio di errore per ogni file rilevato con un nome corrispondente. Questi file corrispondenti non vengono eliminati e non devono impedire al comando di eliminare ciò che dovrebbe. In altre parole, possono essere ignorati in modo sicuro.


1
Sai forse come posso ignorare una cartella all'interno di questa cartella radice dove sto eseguendo questo comando?
Goran Obradovic,

Ha funzionato perfettamente! Grazie! +1
khr055,

1

Questi comandi dovrebbero funzionare su cmd.

del * .obj

del * .bin


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.