如何用Powershell删除CSV文件中含点号的行并覆盖原文件
需求说明
需要每周处理系统自动导出的CSV格式文件,删除所有用户名为「名.姓」格式(包含点号)的行,处理完成后直接覆盖保存原文件。
附上表格部分内容截图:
原有代码报错原因
你之前使用的代码存在两处语法错误:
Set-Content "D:\File.csv"-Force中路径和-Force参数之间缺少空格,触发语法校验报错-NoTypeInformation是Export-Csv命令的专属参数,Set-Content不支持该参数,添加后会触发参数不识别报错
可直接运行的脚本
操作前请先备份原CSV文件,避免误操作导致数据丢失
方案1:全文字符匹配(适合除用户名外其他列无点号的场景)
直接按行文本匹配过滤,简单高效:
Get-Content -Path "D:\file.csv" | Where-Object { $_ -notmatch '\.' } | Set-Content -Path "D:\file.csv" -Force
方案2:指定列匹配(更稳妥,推荐使用)
按CSV的列结构匹配,仅判断用户名所在列的内容,不会误删其他列带点号的行:
请将代码中的
用户名替换为你CSV里用户名列的实际表头名称,编码参数可根据你文件的实际编码调整为GB2312、Default等
# 导入CSV文件 $csv = Import-Csv -Path "D:\file.csv" -Encoding UTF8 # 过滤用户名列不含点号的行 $filterCsv = $csv | Where-Object { $_.用户名 -notmatch '\.' } # 覆盖导出到原文件 $filterCsv | Export-Csv -Path "D:\file.csv" -Force -Encoding UTF8 -NoTypeInformation
注意事项
- 若执行提示权限不足,右键PowerShell选择「以管理员身份运行」后再执行脚本
- 若导出后中文乱码,调整
-Encoding后的参数值适配你的文件编码即可 - 如果需要处理每周生成的不同路径的CSV,可把路径改成参数变量,实现自动化批量处理
内容的提问来源于stack exchange,提问作者Embargo96
相关产品推荐
相关产品推荐

