Quiero eliminar todas las carpetas bin y obj para obligar a todos los proyectos a reconstruir todo
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?
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 -print0
y -0
solucionará 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!
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í.
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
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.