簡単な例として、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ファイルがフォルダから除外されることはありません。
したがって、ワイルドカードはディレクトリには使用できず、ファイル名のみに使用できるようですが、私は何か間違ったことをしているだけだと思います。 ワイルドカードと範囲の演算子について説明しているこの記事 が見つかりましたが、残念ながら、ディレクトリ名での使用については説明していません。ファイル名のみ。
また、excludeパラメータがディレクトリで機能するのを見たことがありません。
Where-Object にパイピングしてみてください。あれは、
Get-ChildItem -Recurse *.pdb | Where-Object {$_.FullName -notMatch "folder2"}
gci "C:\Root" -Recurse | Where-Object {$_.FullName -notlike "*Folder2\*.pdb*"} | Export-CSV "C:\Root\Export.csv" -NoType
試して、テストして、1つのライナー:-)。これは、フォルダとファイル構造をコピーして複製したので機能します。ただし、数年遅れて申し訳ありません。
もちろん、必要に応じてコードを自由に調整してください。
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 や他のシェルのように便利ではありません。