【发布时间】:2018-09-03 12:34:42
【问题描述】:
我的目标是在一个目录中递归地搜索所有包含正则表达式的文件,并牢记速度。然后输出到一个 CSV,其中有一列包含完全匹配,另一列显示他们找到的文件。感谢用户 woxxom,我开始使用 IO.File,因为它显然比使用 Select-String 快得多。
这是我长期从事的一个项目,通过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
}
}
}
【问题讨论】:
-
为什么这个标签是excel?
-
好电话,我删除了标签。
-
“对我的新尝试缺少什么有什么想法吗?” 不知道。什么没有按预期工作?
-
它似乎可以识别信息,但是当我尝试将其写入文件时,它只包含最后一个结果。我以为我正在遍历所有匹配项并进行追加,但结果似乎并非如此。
-
另外,我无法构建要写入文件的字符串。我可以将每个值写入文件,但它们最终会出现在同一列中。
标签: regex powershell