使用 Powershell 从包含特定单词的 CSV 中删除一行?

Using Powershell to strip a row from a CSV that contains a specific word?

这是我的 CSV 文件中的一些示例行。

"ComputerName","Name","Publisher","InstallDate","EstimatedSize","Version","Wow6432Node"
"pcnumber1","Service Pack 1 for Microsoft Office 2013 (KB2850036) 32-Bit Edition","Microsoft P",,"0",,"True"
"pcnumber1","CCleaner","Piriform",,"0","5.01",

原始脚本从指定的计算机中提取有关已安装软件的大量信息,并将其输出为 CSV 格式。我想获取该 CSV 文件并删除其中包含 "Microsoft P" 的所有行。我已经找到了如何从字符串中删除特定单词,如何查找和替换等。不过我很难找到这个特定的函数。

您可以使用 Where-Object 导入 select 所有不包含 "Microsoft P" 的元素,然后导出:

Import-Csv test.csv | where {$_.Publisher -ne "Microsoft P"} | Export-Csv New.csv -notypeinfo

您可以按照 Mark Setchell 的建议使用 FINDSTR。只需指明它是带有 /C.

的文字搜索字符串
FINDSTR /V /C:"Microsoft P" SomeFile.CSV > NewFile.CSV

或者,如果您想要一个 PowerShell 解决方案,您可以忽略它是一个 CSV 文件这一事实,而将其视为一个文本文件。那么你可以:

Get-Content C:\Path\To\File.csv | Where{$_ -notmatch "Microsoft P"} | Out-File C:\Path\To\NewFile.csv

你可以使用

做多个字符串
FINDSTR /V /C:"Microsoft P" /C:"Linux R" /C:"Whatever W" SomeFile.CSV > NewFile.CSV