如何让PowerShell的Import-Csv正确导入空格字符而非转为空字符串
解决Import-Csv自动将空格单元格转换为空字符串的方法
方案1:PowerShell 7.0及以上版本
PowerShell 7.0开始为Import-Csv新增了-NoTrim参数,关闭默认的字段空白修剪行为,直接使用即可保留单元格内的原始空格:
$MyCSV = Import-Csv -Path "C:\MyCSV.csv" -NoTrim
执行后验证:$MyCSV.Header1 -eq " " 会返回True,$MyCSV.Header1 -eq ""会返回False,符合业务需求。
方案2:兼容Windows PowerShell 5.1版本
Windows PowerShell 5.1没有-NoTrim参数,可以借助.NET的TextFieldParser类实现空格保留,核心配置为关闭空白修剪开关:
# 加载依赖程序集 Add-Type -AssemblyName Microsoft.VisualBasic # 初始化CSV解析器 $parser = New-Object Microsoft.VisualBasic.FileIO.TextFieldParser("C:\MyCSV.csv") $parser.SetDelimiters(",") # 关闭字段空白修剪,保留原始内容 $parser.TrimWhiteSpace = $false # 读取表头 $headers = $parser.ReadFields() # 逐行解析生成CSV对象 $MyCSV = while (!$parser.EndOfData) { $fields = $parser.ReadFields() $row = [ordered]@{} for ($i = 0; $i -lt $headers.Count; $i++) { $row[$headers[$i]] = $fields[$i] } [PSCustomObject]$row } # 释放解析器资源 $parser.Close()
内容的提问来源于stack exchange,提问作者Tanaka Saito
相关产品推荐
相关产品推荐

