我处理多个项目,我想递归删除所有名为“bin”或“obj”的文件夹,这样我确信所有项目都会重建所有内容(有时这是迫使 Visual Studio 忘记所有关于以前的构建)。
有没有一种快速的方法来完成这个(例如使用 .bat 文件)而无需编写 .NET 程序?
这取决于您喜欢使用的外壳。
如果您在 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会解决这个缺点,那么上面的例子就变成了:
-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 答案归功于他而不是我 :)
当然,明智的做法是先在安全的地方运行您选择的任何命令来测试它!