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