使用 Powershell 删除包含特定字符的 .CSV 文件中的行

Delete rows in a .CSV file containing specific character with Powershell

我收到系统每周自动导出的 .csv 格式文件。它包含许多带有用户首字母的用户名(例如“fl”、“nk”)。他们中的一些人有他们的名字和姓氏,用逗号分隔(例如 firstname.lastname)。这些是必须从 .csv 文件中删除的内容。

我的目标是编写一个 Powershell 脚本,删除所有包含字符“.”的行。 (点),然后通过覆盖保存相同的 .csv 文件。

由于我是 Powershell 的新手,非常感谢您提供更详细的答案,包括潜在的代码。我尝试了来自类似问题的各种示例,我在此处找到了这些示例,但其中 none 有效 and/or 我收到错误消息,主要是因为我的语法不正确。

补充信息。这是 table.

的一部分

我试过这段代码:

Get-Content "D:\file.csv" | Where-Object {$_ -notmatch '\.'} | Set-Content "D:\File.csv"-Force -NoTypeInformation

正如 Mathias 所说,查看您尝试过的内容很有帮助,这样我们可以帮助您获得有效的结果。很容易给你这样的东西:

$csv = Import-Csv -Path C:\Temp\temp.csv -Delimiter ";"
$newCSV = @()
foreach($row in $csv){
    if(!$row.username -or $row.username -notlike "*.*"){
        $newCSV += $row
    }
}
$newCSV | Export-Csv -Path C:\Temp\temp.csv -Delimiter ";" -NoTypeInformation

以上代码删除了用户名字段上带有点的行。它保留带有空用户名的行与 'if(!$row.username' 部分。但我不知道这是否有帮助,因为没有示例 CSV 文件,也没有办法知道您到目前为止尝试了什么 ;)

请注意,我总是喜欢使用“;”作为分隔符,因为在 Excel 中打开文件已经被正确分隔。如果当前文件使用“,”作为分隔符,您需要在导入 CSV 时更改它。

你们非常亲密!为此,您不需要循环,只需使用正确的 cmdlet 即可:

(Import-Csv -Path 'D:\file.csv' -Delimiter ';') | 
    Where-Object { $_.Initials -notmatch '\.' } | 
    Export-Csv -Path 'D:\file.csv' -Delimiter ';' -Force -NoTypeInformation

Get-Content 只是读取一个文本文件和 returns 行作为字符串数组,而 Import-Csv 解析结构并创建 objects 具有来自 [=21] 的属性=]行。

需要 Import-Csv 两边的括号以确保文件的 importing/parsing 在通过管道传递结果之前完全完成。否则,生成的文件可能会完全变空,因为您无法同时读取和覆盖同一个文件。