¿Cómo crear un archivo por lotes que elimine todas las carpetas llamadas `bin` u` obj` recursivamente?

31

Tengo la necesidad de borrar todo biny objcarpetas en una carpeta en mi PC. Entonces, estoy pensando en un archivo por lotes para hacer eso, pero no estoy familiarizado con el archivo por lotes en Windows. Por favor ayuda.

[Editar]

Después de la discusión con el usuario DMA57361, llegué a la solución actual (aunque todavía tengo problemas, vea nuestros comentarios):

Cree un archivo .bat y pegue el siguiente comando:

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: Cuando ejecuto su script, aparece el siguiente error. ¿Alguna idea?

texto alternativo

Nam G VU
fuente
@Nam: ¿por qué estás corriendo for \/d \/r ...? ¿Por qué las barras dobles en lugar de for /d /r ...? Y al ejecutar la versión "completa" /qal final, como afirmo, elimina todo sin previo aviso, por lo que no devuelve ningún resultado (es decir, no le dice cuándo funciona, solo cuando tiene un error), ¿está seguro de que el segundo ejecutar arriba no funcionó correctamente?
DMA57361
@Nam, esta ejecución tampoco es la misma: en la imagen con la que comienza su comando for / %d in y no for /d /r . %d in, debe usar el comando completo a continuación, cada bit tiene una función diferente y es importante.
DMA57361
@Nam Opps, mis disculpas, tiene toda la razón, ¡no imprime los primeros interruptores! Sin embargo, no arroja ese error y parece funcionar correctamente, para mí. ¿Has intentado simplemente ejecutar el comando desde la línea de comando, en lugar de intentar ejecutarlo desde un archivo por lotes?
DMA57361
Hmm, que extraño. Posiblemente su Win7 esté haciendo algo diferente con el lote en comparación con mi WinXP, entonces, no estoy seguro de qué. Esta noche podré revisar Win7 en casa, de lo contrario me temo que estoy atrapado en este momento ...
DMA57361
En realidad, intente prefijar el comando por lotes con starty vea qué sucede. No es ideal, pero me pregunto si eso puede ayudar.
DMA57361

Respuestas:

42

Esto se ha respondido previamente en Stack Overflow, que es de donde tomé el impulso principal de esta respuesta.

Pruebe el siguiente comando, puede ejecutarlo desde dentro cmd:

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

Si necesita cambiar otras carpetas, simplemente agregue nuevos elementos al (bin,obj)conjunto en el medio del comando.

Esto eliminará todo lo que coincida sin previo aviso y sin usar la papelera de reciclaje ; por lo tanto, si desea un poco más de seguridad, elimine /qla llamada al rdfinal y el sistema debería preguntarle antes de cada eliminación.

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

Si tiene la intención de ejecutar el comando desde un archivo por lotes , deberá reemplazar cada instancia de la variable %dcon %%d, por ejemplo:

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"

Según la conversión tenía en la pregunta comentarios

Si el comando se niega a ejecutarse en un archivo por lotes (no se puede replicar aquí), intente agregar el comando con el prefijo start. Aunque esto iniciará el proceso para ejecutarse simultáneamente con el archivo por lotes, lo que puede causar otros problemas, parece más probable que funcione correctamente.

Además, si tiene archivos con nombre objo bindentro del árbol de carpetas en el que está trabajando el comando, recibirá un mensaje de error para cada archivo encontrado que tenga un nombre coincidente. Estos archivos coincidentes no se eliminan y no deben interponerse en el camino de que el comando elimine lo que debería. En otras palabras, se pueden ignorar de forma segura.

DMA57361
fuente
1
¿Quizás sabe cómo puedo ignorar una carpeta dentro de esta carpeta raíz donde estoy ejecutando este comando?
Goran Obradovic
Funcionó perfectamente! ¡Gracias! +1
khr055
1

Estos comandos deberían funcionar en cmd.

del * .obj

del * .bin

arun babu
fuente
0

Solo haz

del /s /p bin
del /s /p obj
MikeSchem
fuente