PowerShell で Get-ChildItem の結果からアイテムのリストを除外するにはどうすればいいですか? 質問する

PowerShell で Get-ChildItem の結果からアイテムのリストを除外するにはどうすればいいですか? 質問する

特定のタイプを除いて、パス内のファイルのリスト(実際にはファイルの数)を再帰的に取得したいです。

Get-ChildItem -Path $path -Recurse | ? { $_.Name -notlike "*.cs" -and $_.Name -notlike "*.tt" }

しかし、除外項目の長いリストがあります(いくつか例を挙げると):

@("*.cs", "*.tt", "*.xaml", "*.csproj", "*.sln", "*.xml", "*.cmd", "*.txt")

このフォームを使用してリストを取得する方法:

Get-ChildItem -Path $path -Recurse | ? { <# what to put here ?#> }

?

ベストアンサー1

これも機能します:

get-childitem $path -recurse -exclude *.cs,*.tt,*.xaml,*.csproj,
  *.sln,*.xml,*.cmd,*.txt

-include は -recurse またはパス内のワイルドカードでのみ機能することに注意してください。(実際には 6.1 より前のバージョンでは常に機能します)

また、-exclude と -filter の両方を使用すると、-recurse またはパスにワイルドカードがない場合、何もリストされないことに注意してください。

-include と -literalpath も PS 5 では問題があるようです。

また、ルート "" のパスで -include と -exclude を使用すると、何も表示されないというバグもあります。UNIX ではエラーが発生します。

「foo3」のようなディレクトリ (フルパスではない) を除外するのは難しいです。-recurse または -filter では機能しないようです。2 番目の get-childitem にパイプすることができます。

get-childitem -exclude foo3 | get-childitem -recurse -filter file*

おすすめ記事