如何用PowerShell将CSV第二列及以后的列值移至新行?
解决PowerShell拆分CSV所有列值为单独行的问题
我刚好处理过类似的需求,帮你搞定这个问题!
首先看你的CSV示例没有表头,这种情况下用Get-Content直接处理每行更灵活,不需要担心表头的问题。这里有个简单的脚本可以实现你要的效果:
# 读取源CSV文件,处理每行并输出所有列值为单独行 Get-Content -Path "你的CSV文件路径.csv" | ForEach-Object { # 按逗号分割当前行的所有列 $allValues = $_ -split ',' # 输出每个值,同时过滤可能的空值(比如行末尾多出来的逗号) $allValues | Where-Object { $_ -notmatch '^\s*$' } } | Set-Content -Path "输出结果.txt"
脚本说明:
Get-Content:读取CSV的每一行内容$_ -split ',':把当前行按逗号拆成一个个值的数组Where-Object:过滤掉空白值(包括只含空格的情况),避免输出空行Set-Content:把最终结果保存到输出文件里
如果你的CSV是有表头的(比如第一行是列名),那可以用Import-Csv来处理,确保不会把表头当成数据:
# 导入带表头的CSV $csvData = Import-Csv -Path "带表头的CSV文件.csv" # 获取所有列的名称 $columnNames = $csvData[0].PSObject.Properties.Name # 遍历每一行,输出每个列的值 $csvData | ForEach-Object { foreach ($col in $columnNames) { $value = $_.$col # 跳过空值 if ($value -and $value.Trim() -ne '') { $value.Trim() } } } | Set-Content -Path "输出结果.txt"
你之前用Import-Csv搭配Select-Object没成功,是因为Select-Object只是选择列,不会把列里的值拆分成单独的行——我们需要的是遍历每个列的值并逐个输出,这样才能让所有内容都变成单行单个值的形式。
内容的提问来源于stack exchange,提问作者Awsmike
相关产品推荐
相关产品推荐

