web-dev-qa-db-ja.com

PowerShellのディレクトリでワイルドカードを使用する方法Get-ChildItem-Excludeコマンドレット

簡単な例として、3つのフォルダーを含むフォルダーRootがあるとします。 Folder1、Folder2、およびFolder3。これらの各フォルダー(Rootを含む)には、.pdbファイルを含む多数のファイルが含まれています。 PowerShell Get-ChildItemコマンドレット を使用して、Folder2の.pdbファイルを除く、すべてのフォルダー(Rootを含む)のすべてのファイルを返します。私が使用する場合:

Get-ChildItem -Path C:\Root -Recurse -Exclude *.pdb

次に、すべてのディレクトリにあるすべての非.pdbファイルを取得します。これは、必要なファイルに近いものです。だから私は次のことが私が望むことを達成すると思いました:

Get-ChildItem -Path C:\Root -Recurse -Exclude \*\\Folder2\\*.pdb

ただし、これはFolder2(またはその他のフォルダー)内のpdbファイルを除外するものではありません。 -Excludeなど、Folder2\\\*.pdbフィルタのいくつかのバリエーションを試しましたが、機能しません。実際、\*\\\*.pdbを使用しても何も起こらないようです。 .pdbファイルがフォルダから除外されることはありません。

したがって、ワイルドカードはディレクトリには使用できず、ファイル名のみに使用できるようですが、私は何か間違ったことをしているだけだと思います。 ワイルドカードと範囲の演算子について説明しているこの記事 が見つかりましたが、残念ながら、ディレクトリ名での使用については説明していません。ファイル名のみ。

9
deadlydog

また、excludeパラメータがディレクトリで機能するのを見たことがありません。

Where-Object にパイピングしてみてください。あれは、

Get-ChildItem -Recurse *.pdb | Where-Object {$_.FullName -notMatch "folder2"}
8
Paul Rowland
 gci "C:\Root" -Recurse | Where-Object {$_.FullName -notlike "*Folder2\*.pdb*"} | Export-CSV "C:\Root\Export.csv" -NoType

試して、テストして、1つのライナー:-)。これは、フォルダとファイル構造をコピーして複製したので機能します。ただし、数年遅れて申し訳ありません。

もちろん、必要に応じてコードを自由に調整してください。

3
unkn0wn

OhadHの答えはほとんどあります。

あなたが使用することができます

Get-ChildItem -Recurse | Where-Object {$_.FullName -notmatch "folder2" -or $_.Name -notlike "*.pdb" } 

または

Get-ChildItem -Recurse | ? {$_.FullName -notlike "*folder2*" -or $_.Name -notlike "*.pdb" } 

それはあなたのfolder2がどこにあるかによります。しかし、私はあなたがその考えを理解したと思います。

言いたくないのですが、PowerShellは Bash や他のシェルのように便利ではありません。

3
CS Pei