ディレクトリを再帰的に検索するが、指定されたファイル(たとえば、*.log
、およびmyFile.txt
)、および指定されたディレクトリとその内容(たとえば、myDir
およびmyDir
の下のすべてのファイルとフォルダ)を除外します。
私は Get-ChildItem
CmdLet、および Where-Object
CmdLetですが、この正確な動作が得られないようです。
Get-ChildItemコマンドレットには-Exclude
パラメータは使用したいが、私が伝えることができるものからディレクトリ全体を除外するために機能しません。次のようなものを試してください:
function GetFiles($ path = $ pwd、[string []] $ exclude) { foreach(Get-ChildItem $ pathの$ item) { if($ exclude | Where {$ item -like $ _}){continue} if(Test-Path $ item.FullName -PathType Container) { $ item GetFiles $ item.FullName $ exclude } else { $ item } } }
もう1つのオプションは、効率的ではありませんが、より簡潔です。私が一般的にこの種の問題を処理する方法です:
_Get-ChildItem -Recurse .\targetdir -Exclude *.log |
Where-Object { $_.FullName -notmatch '\\excludedir($|\\)' }
_
\\excludedir($|\\)'
式を使用すると、ディレクトリとそのコンテンツを同時に除外できます。
更新:msorensの優れた回答を確認してください。このアプローチでのエッジケースの欠陥、および全体的なソリューションの詳細.