我与多个项目一起工作,我想递归删除所有名为“bin”或“obj”的文件夹,这样我就可以确保所有项目都会重新构建所有内容(有时这是迫使Visual Studio忘记所有以前的构建的唯一方法)。

是否有一种快速的方法来实现这一点(例如使用.bat文件),而不必编写。net程序?


当前回答

考虑到PS1文件在currentFolder(你需要删除bin和obj文件夹的文件夹)中

$currentPath = $MyInvocation.MyCommand.Path
$currentFolder = Split-Path $currentPath

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

其他回答

这取决于您更喜欢使用的shell。

如果你在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

and:

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

如果你正在使用Powershell,那么你可以使用这个:

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

如下面的Robert H的回答所示——如果你选择给任何东西投赞成票,请确保你把功劳归功于他,而不是我:)

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

实际上,你可以进一步使用PS的建议,在项目目录中创建一个vbs文件,就像这样:

Option Explicit
Dim oShell, appCmd
Set oShell  = CreateObject("WScript.Shell")
appCmd      = "powershell -noexit Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -WhatIf }"
oShell.Run appCmd, 4, false

为了安全起见,我包含了-WhatIf参数,所以如果在第一次运行时对列表感到满意,可以删除它。

我使用Robert H的轻微修改,跳过错误并打印删除文件。我通常也会清除.vs, _resharper和package文件夹:

Get-ChildItem -include bin,obj,packages,'_ReSharper.Caches','.vs' -Force -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse -ErrorAction SilentlyContinue -Verbose}

另外值得注意的是,git命令清除所有更改,包括忽略的文件和目录:

git clean -dfx

我们有一个大的。sln文件与许多项目文件。我开始了一个“ViewLocal”目录的策略,所有非源代码控制的文件都位于这个目录中。该目录中有一个“Inter”和一个“Out”目录。分别用于中间文件和输出文件。

这显然让你很容易去到你的“viewlocal”目录,做一个简单的删除,以摆脱一切。

在花时间研究如何使用脚本解决这个问题之前,您可能会考虑设置一些类似的东西。

我不会说谎,在一个大型组织中维持这样的设置已经证明....有趣。特别是当您使用像QT这样的技术来处理文件和创建非源代码控制的源文件时。但那完全是另一回事了!

http://vsclean.codeplex.com/

查找Visual的命令行工具 工作室解决方案和运行清洁 指挥他们。这可以让你清洁 打开所有这些的/bin/*目录 你手头的旧项目 你的硬盘