35

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

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 ?#> }

?

4

5 に答える 5

50

これも機能します:

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

-include は、パス内の -recurse またはワイルドカードでのみ機能することに注意してください。(実際、6.1 pre 2 では常に動作します)

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

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

-include と -exclude のルート "\" のパスにバグがあり、何も表示されません。UNIX ではエラーが発生します。

于 2016-11-28T17:18:28.730 に答える
11

Where-Object コマンドレットを使用して行う方法は次のとおりです。

$exclude = @(".cs", ".tt", ".xaml", ".csproj", ".sln", ".xml", ".cmd", ".txt")
Get-ChildItem -Path $path -Recurse | Where-Object { $exclude -notcontains $_.Extension }

ディレクトリも結果に返されたくない場合は、これを使用します。

$exclude = @(".cs", ".tt", ".xaml", ".csproj", ".sln", ".xml", ".cmd", ".txt")
Get-ChildItem -Path $path -Recurse | Where-Object { (-not $_.PSIsContainer) -and ($exclude -notcontains $_.Extension) }
于 2013-10-06T15:14:42.653 に答える