私の目標は、スピードを考慮した正規表現を含むすべてのファイルをディレクトリから再帰的に検索することです。正確な一致が含まれている列を持つCSVに出力し、別の列に見つかったファイルを表示します。ユーザーwoxxomのおかげで、Select-String
を使用するよりもはるかに速いので、IO.File
で再生を開始しました。PowerShellを使ってRegexファイルとCSV出力ファイルをすばやく検索
これは私が長年取り組んできたプロジェクトで、Select-String
とExport-Csv
を使って達成できましたが、やや遅い処理です。
私の新しい試みには何が欠けているのでしょうか?
$ResultsCSV = "C:\TEMP\Results.csv"
$Directory = "C:\TEMP\examples"
$RX = "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.|dot|\[dot\]|\[\.\])){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
$TextFiles = Get-ChildItem $Directory -Include *.txt*,*.csv*,*.rtf*,*.eml*,*.msg*,*.dat*,*.ini*,*.mht* -Recurse
$out = [Text.StringBuilder]
foreach ($FileSearched in $TextFiles) {
$text = [IO.File]::ReadAllText($FileSearched)
foreach ($match in ([regex]$RX).Matches($text)) {
if (!(Test-Path $ResultsCSV)) {
'Matches,File Path' | Out-File $ResultsCSV -Encoding ASCII
$out.AppendLine('' + $match.value + ',' + $FileSearched.fullname)
$match.value | Out-File $ResultsCSV -Encoding ascii -Append
$FileSearched.Fullname | Out-File $ResultsCSV -Encoding ascii -Append
$out.ToString() | Out-File $ResultsCSV -Encoding ascii -Append -NoNewline
}
}
}
を書き込むことによって、パフォーマンスを高速化することができますか? – xidgel
いいですよね、私はタグを削除しました。 – MrMr
*「私の新しい試みで何が失われているのか?」* Dunno。期待どおりに動作しないのは何ですか? –