文字列、コードなどの100万未満のファイルを検索して一致を見つけ、特定の文字列パターンのすべてのヒットをCSVファイルに出力するスクリプトを作成する必要があります。PowerShellで簡単な検索スクリプトを最適化する
これまでのところ私はこれを作った。
$location = 'C:\Work*'
$arr = "foo", "bar" #Where "foo" and "bar" are string patterns I want to search for (separately)
for($i=0;$i -lt $arr.length; $i++) {
Get-ChildItem $location -recurse | select-string -pattern $($arr[$i]) | select-object Path | Export-Csv "C:\Work\Results\$($arr[$i]).txt"
}
これは私にそれで単語「foo」という持つすべてのファイルのリストで「foo.txtの」という名前のCSVファイル、およびすべてのファイルのリストで「bar.txt」という名前のファイルを返します。単語 "bar"を含む。
このスクリプトを最適化してより速く動作させる方法はありますか?まったく違うが、同等のスクリプトをもっと速く動かす方法についてのアイデアは?
すべての入力が高く評価されました。
今はどれくらいですか(好奇心から)?出力に一致するものを含むファイルパスのみが必要ですか? –
今度は配列の〜2時間のpr項目が必要です。ちょっと前に測定コマンドトリックを学びました。プロセスがキャッシュされるとパフォーマンスが向上するかどうかを確認します。 - 一致を含むファイルパスのみが必要です。はい – cc0
各配列アイテム(文字列)の長さが処理時間に大きく影響するように見えることも追加できます。 CPU使用率は、最初のスルースルーの間に約15-20%でした。今それは約4-5%のようです。興味深いもの。 – cc0