回答:
これは、使用するシェルによって異なります。
Windowsでcmdシェルを使用している場合、以下が機能するはずです。
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タイプのシェル(WindowsまたはほとんどのLinux / OS Xシェルでのgit bashまたはbabunなど)を使用している場合、これは、より優れた、より簡潔な方法で目的の操作を実行できます。
find . -iname "bin" | xargs rm -rf
find . -iname "obj" | xargs rm -rf
これをORで1行に減らすことができます。
find . -iname "bin" -o -iname "obj" | xargs rm -rf
ファイル名のディレクトリにスペースまたは引用符が含まれている場合、findはそれらのエントリをそのまま送信し、xargsは複数のエントリに分割される場合があることに注意してください。お使いのシェルサポートしている場合は、それら、-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の回答をクレジットに記入してください。
もちろん、最初に安全な場所で選択したコマンドを実行してテストするのが賢明です。
私はこのスレッドを見つけてビンゴを手に入れました。もう少し検索すると、このPower Shellスクリプトが見つかりました。
Get-ChildItem .\ -include bin,obj -Recurse | ForEach-Object ($_) { Remove-Item $_.FullName -Force -Recurse }
ここを見ていて答えが見つからなかったので、共有したいと思いました。
gci -include bin,obj -recurse | remove-item -force -recurse
)に直接パイプすることができるはずです
-WhatIf
最初にテストするフラグが好きなので、次のようになりました$foldersToRemove='bin','obj';[string[]]$foldersToIgnore='ThirdParty';Get-ChildItem .\ -Include $foldersToRemove -Recurse|Where-Object{$_.FullName -inotmatch "\\$($foldersToIgnore -join '|')\\"}|Remove-Item -Force -Recurse -WhatIf
(ここでは1行として少し厄介です:))
私はいつも、これを達成するためのソリューションに新しいターゲットを追加します。
<Target Name="clean_folders">
<RemoveDir Directories=".\ProjectName\bin" />
<RemoveDir Directories=".\ProjectName\obj" />
<RemoveDir Directories="$(ProjectVarName)\bin" />
<RemoveDir Directories="$(ProjectVarName)\obj" />
</Target>
そして、あなたはコマンドラインからそれを呼び出すことができます
msbuild /t:clean_folders
これはバッチファイルにすることができます。
msbuild /t:clean_folders
PAUSE
私が書いたPowerShellスクリプトを実行するに。
利点は、削除されたフォルダの概要が出力され、無視するサブフォルダ階層を指定した場合は無視されることです。
$_ -notmatch 'node_modules'
、$FoldersToRemove
変数の定義に条件を追加します
何もうまくいきませんでした。デバッグとリリースのために、binおよびobjフォルダー内のすべてのファイルを削除する必要がありました。私の解決策:
1.プロジェクトを右クリックしてアンロードし、もう一度右クリックして編集し、一番下に移動します
2.挿入
<Target Name="DeleteBinObjFolders" BeforeTargets="Clean">
<RemoveDir Directories="..\..\Publish" />
<RemoveDir Directories=".\bin" />
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
</Target>
3.プロジェクトを保存してリロードし、clean and prestoを右クリックします。
ビルド前にbinとobjを削除するには、プロジェクトファイルに追加します。
<Target Name="BeforeBuild">
<!-- Remove obj folder -->
<RemoveDir Directories="$(BaseIntermediateOutputPath)" />
<!-- Remove bin folder -->
<RemoveDir Directories="$(BaseOutputPath)" />
</Target>
CleanProjectを見ると、binフォルダー、objフォルダー、TestResultsフォルダー、Resharperフォルダーが削除されます。ソースコードも入手可能です。
OBJ削除するには、Windows PowerShellを使用して、ビンとReSharperのフォルダ
構文が短いロバートHの回答によく似ています
スクリプトの下に貼り付けて実行
dir。\ -include bin、obj、resharper * -recurse | foreach($){rd $ _。fullname –Recurse –Force}
非常にすばやく簡単な方法は、rimraf
npmユーティリティを使用して、最初にグローバルにインストールすることです。
> npm i rimraf -g
そして、プロジェクトルートからのコマンドは非常に簡単です(スクリプトファイルに保存できます)。
projectRoot> rimraf **/bin **/obj
目的の効果を最適化するにはBeforeRebuild
、ドキュメントで指定されているプロジェクトイベントターゲット(使用できるものは、前のコマンドを実行する)を利用できます。https://docs.microsoft.com/en-us/visualstudio/ msbuild / how-to-extend-the-visual-studio-build-process?view = vs-2017
クロスプラットフォームで非常に高速なリムラフユーティリティが気に入っています。ただし、RemoveDir
ターゲットイベントオプションを使用する場合は、.csproj のコマンドを使用することもできます。このRemoveDir
アプローチは、ここ@Shamanの別の回答でよく説明されています:https ://stackoverflow.com/a/22306653/1534753
これは、私が同様の質問に答えたものです。シンプル、簡単、かなり機能し、Visual Studioですでに持っているもの以外は何も必要としません。
他の人がすでに応答しているので、Cleanはビルドによって生成されたすべてのアーティファクトを削除します。しかし、それは他のすべてを残します。
MSBuildプロジェクトにいくつかのカスタマイズがある場合、これは問題を引き起こし、削除する必要があると思われるものを残す可能性があります。
これを末尾近くに追加することで、。* projに簡単な変更を加えるだけでこの問題を回避できます。
<Target Name="SpicNSpan"
AfterTargets="Clean">
<RemoveDir Directories="$(OUTDIR)"/>
</Target>
これにより、現在のプラットフォーム/構成のbinフォルダー内のすべてが削除されます。
これは、すべての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
ビルドサーバーでは、nantスクリプトを使用して、binおよびobjディレクトリを明示的に削除します。
各プロジェクトビルドスクリプトは、そのoutput / tempディレクトリを担当します。そのようにうまく動作します。したがって、プロジェクトを変更して新しいプロジェクトを追加するときは、スクリプトを作業スクリプトに基づいて作成します。削除の段階に気づき、それを処理します。
ロジック開発マシンでそれを行う場合は、他の人が述べたように、Visual Studioを介してクリーンに固執します。
私は実際にはソースツリーをポイ捨てするobjファイルが嫌いです。私は通常、プロジェクトがソースツリーの外にobjファイルを出力するように設定します。C#プロジェクトの場合、私は通常使用します
<IntermediateOutputPath>..\..\obj\$(AssemblyName)\$(Configuration)\</IntermediateOutputPath>
C ++プロジェクトの場合
IntermediateDirectory="..\..\obj\$(ProjectName)\$(ConfigurationName)"
Visual Studioソリューションを見つけ、それらに対してCleanコマンドを実行するコマンドラインツール。これにより、ハードドライブにある古いプロジェクトすべての/ bin / *ディレクトリをクリーンアップできます
実際に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などのテクノロジを使用している場合は特にそうです。しかし、それはまったく別の話です!
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 }
バッチでのソリューション。次のコマンドを使用しています。
FOR /D /R %%G in (obj,bin) DO @IF EXIST %%G IF %%~aG geq d RMDIR /S /Q "%%G"
DIR /S /AD /B xxx
1. DIR /S /AD /B obj
を使用しない理由は空のリストを返します(少なくとも私のWindows10では)
2. 予期しない結果が含まれます(tobjフォルダー)
DIR /S /AD /B *obj
@IF EXIST %%G IF %%~aG geq d
存在するパスをチェックするために使用され、パスはファイルではなくフォルダーです。
これは私にとってはうまくいきます:/ d / rから始めます。(bin、obj、ClientBin、Generated_Code)に%% dが存在する場合、@ ifが存在する場合 "%% d" rd / s / q "%% d"
私はあなたのソリューション/プロジェクトを右クリックして「クリーン」ボタンをクリックできると思います。
私が覚えている限り、それはそのように働いていました。現在、VS.NETを持っていないため、テストできません。