Mic*_*elD 234 cmd batch-file visual-studio-2008 visual-studio
我使用多个项目,我希望递归删除名为'bin'或'obj'的所有文件夹,这样我确信所有项目都会重建所有内容(有时这是强制Visual Studio忘记以前的唯一方法)编译).
有没有快速的方法来完成这个(例如.bat文件)而不必编写.NET程序?
Ste*_*ock 365
这取决于您喜欢使用的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"
Run Code Online (Sandbox Code Playgroud)
如果你使用bash或zsh类型的shell(例如Windows上的git bash或babun或大多数Linux/OS X shell),那么这是一个更好,更简洁的方法来做你想要的:
find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
这可以通过OR减少到一行:
find . -iname "bin" -o -iname "obj" | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的文件名目录包含空格或引号,则find将按原样发送这些条目,xargs可以将其分成多个条目.在macOS上,解决方法是使用-print0和-0,以便上面的示例变为:
find . -iname "bin" -print0 | xargs -0 rm -rf
find . -iname "obj" -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)
和:
find . -iname "bin" -o -iname "obj" -print0 | xargs -0 rm -rf
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Powershell,那么您可以使用:
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
Run Code Online (Sandbox Code Playgroud)
正如罗伯特H在下面的回答中所看到的那样 - 如果你选择投票,那么请确保你为powershell答案而不是我给予他赞誉:)
当然,最好先运行安全的任何命令来测试它!
Rob*_* H. 225
我找到了这个帖子并得到了宾果游戏.再多搜索一下这个电源shell脚本:
Get-ChildItem .\ -include bin,obj -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
Run Code Online (Sandbox Code Playgroud)
考虑到我在这里看时没找到答案,我以为我会分享.
Dan*_*ner 65
这对我有用:
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
Run Code Online (Sandbox Code Playgroud)
基于superuser.com 上的这个答案
Jho*_*re- 31
我总是在我的解决方案中添加一个新目标来实现这一目标.
<Target Name="clean_folders">
<RemoveDir Directories=".\ProjectName\bin" />
<RemoveDir Directories=".\ProjectName\obj" />
<RemoveDir Directories="$(ProjectVarName)\bin" />
<RemoveDir Directories="$(ProjectVarName)\obj" />
</Target>
Run Code Online (Sandbox Code Playgroud)
你可以从命令行调用它
msbuild /t:clean_folders
Run Code Online (Sandbox Code Playgroud)
这可以是您的批处理文件.
msbuild /t:clean_folders
PAUSE
Run Code Online (Sandbox Code Playgroud)
dob*_*lak 25
我写了一个powershell脚本来做到这一点.
优点是它打印出已删除文件夹的摘要,如果指定了要忽略的子文件夹层次结构,则忽略这些文件夹.

Kde*_*hog 16
没有什么对我有用.我需要删除bin和obj文件夹中的所有文件以进行调试和发布.我的解决方案
1.右键单击项目,卸载,再次右键单击编辑,转到底部
2.插入
<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
<RemoveDir Directories="..\..\Publish" />
<RemoveDir Directories=".\bin" />
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
3.保存,重新加载项目,右键单击"清理"和"presto".
vez*_*kov 13
在清洁目标之后,像这样的东西应该以非常优雅的方式做到:
<Target Name="RemoveObjAndBin" AfterTargets="Clean">
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<RemoveDir Directories="$(TargetDir)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
要在构建之前删除bin和obj,请添加到项目文件:
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
以下是文章:如何在构建或部署之前删除bin和/或obj文件夹
非常类似于史蒂夫的 PowerShell 脚本。我刚刚添加了 TestResults 和包,因为大多数项目都需要它。
Get-ChildItem .\ -include bin,obj,packages,TestResults -Recurse | foreach ($_) { remove-item $_.fullname -Force -Recurse }
Run Code Online (Sandbox Code Playgroud)
这是我的批处理文件,用于递归删除所有 BIN 和 OBJ 文件夹。
@echo off
@echo Deleting all BIN and OBJ folders...
for /d /r . %%d in (bin,obj) do @if exist "%%d" rd /s/q "%%d"
@echo BIN and OBJ folders successfully deleted :) Close the window.
pause > nul
Run Code Online (Sandbox Code Playgroud)
我对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}
Run Code Online (Sandbox Code Playgroud)
另外值得注意的是git清除所有更改(包括忽略的文件和目录)的命令:
git clean -dfx
Run Code Online (Sandbox Code Playgroud)
一个非常快速和轻松的方法是使用rimrafnpm 实用程序,首先全局安装它:
> npm i rimraf -g
Run Code Online (Sandbox Code Playgroud)
然后来自项目根目录的命令非常简单(可以保存到脚本文件中):
projectRoot> rimraf **/bin **/obj
Run Code Online (Sandbox Code Playgroud)
为了优化所需的效果,您可以利用BeforeRebuild文档中指定的项目事件目标(您可以使用的是并使其运行上一个命令):https : //docs.microsoft.com/en-us/visualstudio/ msbuild/how-to-to-extend-the-visual-studio-build-process?view=vs-2017
我喜欢 rimraf 实用程序,因为它是跨平台的,而且速度非常快。但是,RemoveDir如果您决定使用目标事件选项,您也可以使用.csproj 中的命令。RemoveDir@Shaman 在此处的另一个答案中很好地解释了该方法:https ://stackoverflow.com/a/22306653/1534753
| 归档时间: |
|
| 查看次数: |
105306 次 |
| 最近记录: |