次のコードをpowershellスクリプトとして実行しようとしていますが、機能しません。 1つ目は、次は1つの-Include
アイテムですが、複数のアイテムで動作するようには思えません。第二に、-Exclude
境界が機能していないようです。 C:\ WindowsおよびC:\ Program Filesディレクトリからファイルを取得します。
$Include = "*.Zip","*.rar","*.tar","*.7Zip"
$exclude = "C:\Windows","C:\Program Files"
Get-ChildItem "C:\" -Include $Include -Exclude $Exclude -Recurse -Force -ErrorAction silentlycontinue | Select-Object -ExpandProperty FullName
注:このスクリプトの目的は、システム上のすべての圧縮ファイルを検索することです。私はこれがおそらく本当に単純であることを知っていますが、私はそれを機能させることができないようです。
-Exclude
パラメータが実際に正しく機能したことはありません。 Name
プロパティと一致しているようですが、これは通常あまり役に立ちません。おそらく自分でフィルタリングを行う必要があります。
$Include = "*.Zip","*.rar","*.tar","*.7Zip"
Get-ChildItem "C:\" -Include $Include -Recurse -Force -ErrorAction silentlycontinue |
? { $_.FullName -notmatch "^C:\\Windows" -and $_.FullName -notmatch "^C:\\Program" } |
Select-Object -ExpandProperty FullName
(ちなみに、-Filter
は-Include
よりもはるかに高速です。欠点は、-Include
のようにパターンの配列を指定できないことです。しかし、それでも可能性があります。 4回検索する必要があったとしても、高速になります。はっきりとは言えません。速度が重要かどうかをテストする価値があるかもしれません。)
-excludeが期待どおりに機能しないことを私はdangphに同意します。
-notmatchを使用する場合、または|
を使用して正規表現パターンを作成できます。
これは、修正された$ includeで機能します。
$Include = @('*.Zip','*.rar','*.tar','*.7Zip')
$exclude = [RegEx]'^C:\\Windows|^C:\\Program Files'
Get-ChildItem "C:\" -Include $Include -Recurse -Force -EA 0|
Where FullName -notmatch $exclude|
Select-Object -ExpandProperty FullName
EDit除外されたフォルダは第1レベルであるため、それらをまったく繰り返さない方がはるかに高速であるため、2つのステップによるアプローチの方が効率的です。
$Include = @('*.Zip','*.rar','*.tar','*.7Zip')
$exclude = [RegEx]'^C:\\Windows|^C:\\Program Files'
Get-ChildItem "C:\" -Directory |
Where FullName -notmatch $exclude|ForEach {
Get-ChildItem -Path $_.FullName -Include $Include -Recurse -Force -EA 0|
Select-Object -ExpandProperty FullName
}