13

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

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 ファイルはありません。

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

4

5 に答える 5

11

ディレクトリで動作する除外パラメーターも見たことがありません。

Where-Objectにパイプしてみることができます。あれは、

Get-ChildItem -Recurse *.pdb | Where-Object {$_.FullName -notMatch "folder2"}
于 2013-01-23T01:16:28.403 に答える
5
 gci "C:\Root" -Recurse | Where-Object {$_.FullName -notlike "*Folder2\*.pdb*"} | Export-CSV "C:\Root\Export.csv" -NoType

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

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

于 2015-12-02T11:01:53.880 に答える
4

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や他のシェルほど便利ではありません。

于 2013-04-11T14:31:40.970 に答える
-1

これはあなたのために働くはずです:

Get-ChildItem -Path C:\Root -Exclude "*\Folder2\*.pdb" -Recurse
于 2013-01-24T09:56:50.590 に答える