web-dev-qa-db-ja.com

一部のファイルとフォルダーを除外して、PowerShellから再帰的なディレクトリとファイルリストを取得する方法

ディレクトリを再帰的に検索するが、指定されたファイル(たとえば、*.log、およびmyFile.txt)、および指定されたディレクトリとその内容(たとえば、myDirおよびmyDirの下のすべてのファイルとフォルダ)を除外します。

私は Get-ChildItem CmdLet、および Where-Object CmdLetですが、この正確な動作が得られないようです。

27
Sako73

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 
} 
} 
} 
25
Keith Hill

もう1つのオプションは、効率的ではありませんが、より簡潔です。私が一般的にこの種の問題を処理する方法です:

_Get-ChildItem -Recurse .\targetdir -Exclude *.log |
  Where-Object { $_.FullName -notmatch '\\excludedir($|\\)' }
_

\\excludedir($|\\)'式を使用すると、ディレクトリとそのコンテンツを同時に除外できます。

更新:msorensの優れた回答を確認してください。このアプローチでのエッジケースの欠陥、および全体的なソリューションの詳細.

11
ajk