小编典典

我想删除所有 bin 和 obj 文件夹以强制所有项目重建所有内容

all

我处理多个项目,我想递归删除所有名为“bin”或“obj”的文件夹,这样我确信所有项目都会重建所有内容(有时这是迫使 Visual Studio
忘记所有关于以前的构建)。

有没有一种快速的方法来完成这个(例如使用 .bat 文件)而无需编写 .NET 程序?


阅读 102

收藏
2022-03-30

共1个答案

小编典典

这取决于您喜欢使用的外壳。

如果您在 Windows 上使用 cmd shell,那么以下应该可以工作:

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"

如果您使用的是 bash 或 zsh 类型的 shell(例如 Windows 或大多数 Linux / OS X shell 上的 git bash 或
babun),那么这是一种更好、更简洁的方式来执行您想要的操作:

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

这可以用 OR 简化为一行:

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

请注意,如果您的文件名目录包含空格或引号, find 将按原样发送这些条目,xargs 可能会拆分为多个条目。如果你的 shell
支持它们,-print0并且-0会解决这个缺点,那么上面的例子就变成了:

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

和:

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

如果您使用的是 Powershell,那么您可以使用它:

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

如下面罗伯特 H 的回答所示-如果您选择对任何内容进行投票,请确保您将 powershell 答案归功于他而不是我 :)

当然,明智的做法是先在安全的地方运行您选择的任何命令来测试它!

2022-03-30