如何使用PowerShell在CSV文件表头上方添加多列自定义内容
实现方案
固定列数实现(已知原有CSV列数的场景)
你原有CSV为3列,每一行前置内容需要用2个逗号分隔3个列的位置,包含逗号的列内容用双引号包裹即可,直接修改现有代码如下:
Set-Content -LiteralPath sample.csv -NoNewLine -Value ( @' Title,, "From/De:","To/A:", "Name, with comma","Name2", "Add1, Road A","Add2, Road B", "Zip1 10001","Zip2 20001", '@ + (Get-Content -Raw sample.csv) )
- 每行末尾的逗号数量根据列数调整:N列就加N-1个逗号,空列无需填写内容即可
- 内容含逗号、空格、特殊符号时,用双引号包裹整段内容即可完成CSV标准转义
动态适配列数实现(无需提前确认原有CSV列数)
如果需要兼容不同列数的CSV,可以先读取原有CSV的表头自动计算列数,自动为前置行补全空列,代码如下:
# 读取原有CSV内容 $oldContent = Get-Content -Raw sample.csv # 计算列数:取第一行表头拆分后的元素数量 $colCount = ($oldContent -split "`n", 2)[0].Split(',').Count # 定义前置行内容,每一行只需要填你需要的列,后面会自动补全空列 $preLines = @( "Title", "`"From/De:`",`"To/A:`"", "`"Name, with comma`",`"Name2`"", "`"Add1, Road A`",`"Add2, Road B`"", "`"Zip1 10001`",`"Zip2 20001`"" ) # 为每一行前置内容补全足够的逗号,对齐总列数 $preContent = $preLines | ForEach-Object { $currentCol = $_.Split(',').Count $_ + ',' * ($colCount - $currentCol) } | Join-String -Separator "`n" # 合并内容写入文件 Set-Content -LiteralPath sample.csv -NoNewLine -Value ($preContent + "`n" + $oldContent)
注意:如果你的原有CSV表头本身包含逗号(已用双引号转义),可以替换列数计算逻辑为
$colCount = (Import-Csv sample.csv | Get-Member -MemberType NoteProperty).Count,避免拆分错误。
内容的提问来源于stack exchange,提问作者Milan Patel
相关产品推荐
相关产品推荐

