Quiero eliminar todas las carpetas bin y obj para obligar a todos los proyectos a reconstruir todo

Resuelto MichaelD asked hace 15 años • 30 respuestas

Trabajo con varios proyectos y quiero eliminar recursivamente todas las carpetas con el nombre 'bin' u 'obj'. De esa manera, estoy seguro de que todos los proyectos reconstruirán todo (a veces es la única forma de obligar a Visual Studio a olvidarse de todo lo anterior). construye).

¿Existe una manera rápida de lograr esto (con un archivo .bat, por ejemplo) sin tener que escribir un programa .NET?

MichaelD avatar Apr 16 '09 16:04 MichaelD
Aceptado

Esto depende del shell que prefieras usar.

Si está utilizando el shell cmd en Windows, lo siguiente debería funcionar:

FOR /F "tokens=*" %%G IN ('DIR /B /AD /S bin') DO RMDIR /S /Q "%%G"
FOR /F "tokens=*" %%G IN ('DIR /B /AD /S obj') DO RMDIR /S /Q "%%G"

Si está utilizando un shell de tipo bash o zsh (como git bash o babun en Windows o la mayoría de los shells de Linux/OS X), esta es una forma mucho más agradable y concisa de hacer lo que desea:

find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf

y esto se puede reducir a una línea con un OR:

find . -iname "bin" -o -iname "obj" | xargs rm -rf

Tenga en cuenta que si sus directorios de nombres de archivos contienen espacios o comillas, buscar enviará esas entradas tal como están, que xargs pueden dividir en varias entradas. Si su shell los admite -print0y -0solucionará esta deficiencia, los ejemplos anteriores se convierten en:

find . -iname "bin" -print0 | xargs -0 rm -rf
find . -iname "obj" -print0 | xargs -0 rm -rf

y:

find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf

Si estás usando Powershell entonces puedes usar esto:

Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }

como se ve en la respuesta de Robert H a continuación , solo asegúrese de darle crédito a él por la respuesta de PowerShell en lugar de a mí si decide votar algo :)

¡Por supuesto, sería prudente ejecutar primero cualquier comando que elija en un lugar seguro para probarlo!

Steve Willcock avatar Apr 16 '2009 09:04 Steve Willcock

Encontré este hilo y obtuve bingo. Un poco más de búsqueda arrojó este script de Power Shell:

Get-ChildItem .\ -include bin,obj -Recurse | ForEach-Object ($_) { Remove-Item $_.FullName -Force -Recurse }

O más conciso:

gci -include bin,obj -recurse | remove-item -force -recurse

Pensé en compartirlo, considerando que no encontré la respuesta cuando buscaba aquí.

Robert H. avatar May 08 '2011 00:05 Robert H.

Esto funcionó para mí:

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

Basado en esta respuesta en superuser.com

Daniel Rehner avatar Aug 23 '2011 19:08 Daniel Rehner

Escribí un script de PowerShell para hacerlo.

La ventaja es que imprime un resumen de las carpetas eliminadas y de las ignoradas si especificaste alguna jerarquía de subcarpetas para ignorarla.

Ejemplo de salida

doblak avatar Jan 24 '2012 13:01 doblak