关于本文
本文是通过利用生成式 AI 的自动化生成流程创建的。我们查阅了 Microsoft Learn 的 Import-Csv -Delimiter 规范,并整理了一种可以通过虚拟数据测试 CSV 显示为单列时的排查方法。在编写本文时,未执行 PowerShell。验证状态:📘 已确认 Microsoft 官方规范・未进行 PowerShell 实际运行
信息确认日期:2026年10月2日。
CSV 的分隔符并不一定都是逗号。如果将分号分隔的文件当作默认的逗号分隔来读取,有时它看起来就像只有单列。
查看列数
@' Id;Name 1;Alice 2;Bob '@ | Set-Content -LiteralPath "$env:TEMP\demo.csv" -Encoding utf8 $data = Import-Csv "$env:TEMP\demo.csv" -Delimiter ';' $data[0].PSObject.Properties.Name
Delimiter 的默认值是逗号。如果指定的字符与实际的分隔符不一致,就无法将列正确地分到不同的属性中。
更改一处
Import-Csv "$env:TEMP\demo.csv" -Delimiter ','
如果整个标题看起来像是一个属性名,在断定数据损坏之前,可以先怀疑是 Delimiter 的问题。
通过机器自动确认列数
$row = Import-Csv "$env:TEMP\demo.csv" -Delimiter ';' | Select-Object -First 1 $row.PSObject.Properties.Count
flowchart TD A["CSV受領"] --> B["区切り文字確認"] B --> C["Import-Csv -Delimiter"] C --> D["列名/列数確認"] D --> E["後続処理"]
如果在工作中应用
同时检查字符编码、引号、换行符和标题名。在读取后立即验证必需的列,如果不符合预期,则停止后续处理。
“明明是 CSV 却只有一列”并不一定意味着文件已损坏
尽管被称为 CSV,但实际文件中也可能会使用逗号以外的分隔符。不要将 Import-Csv 视为“能够通过外观自动判断的万能解析器”,最好先确认接收到的数据的分隔符和标题后再进行读取,这样更安全。
特别是在自动化处理中,Import-Csv 不会报错而是“作为单列被正常读取”的情况往往非常棘手。为了防止错误更新,与其直接将其传递给后续处理,不如在最初就验证预期的属性名或列数,如果不符合预期则予以中止。

