更新时间:2023-02-23 12:54:19
以下内容应该可以满足您的需求(在 PSv5.1 中测试过):
The following should do what you want (tested in PSv5.1):
Import-Csv C:\test.csv | ForEach-Object -Begin { $writeHeader = $True } {
if ($writeHeader) { $writeHeader = $False; $_.psobject.properties.Name -join ',' }
$_.psobject.properties.Value -replace ',', '' -join ','
} | Set-Content -Encoding UTF8 test1.csv
Import-Csv
将您的 CSV 文件读入自定义对象([pscustomobject]
实例),其属性包含删除双引号的列值.
Import-Csv
reads your CSV file into custom objects ([pscustomobject]
instances) whose properties contain the column values with double quotes removed.
,
实例可以盲目替换,而不必担心列分隔,
实例.,
instances can therefore blindly replaced without worrying about column-separating ,
instances.问题是你不能在修改对象后使用Export-Csv
,因为它总是加双引号(返回)围绕所有输出值.
The problem is that you can not use Export-Csv
after modifying the objects, because it invariably adds double quotes (back) around all output values.
因此,必须使用ForEach-Object
为每个自定义对象执行自定义迷你脚本:
Therefore, a custom mini-script must be executed for each custom object, using ForEach-Object
:
-Begin { $writeHeader = $True }
在开始时执行一次,表示需要在第一个数据行之前输出标题行.
-Begin { $writeHeader = $True }
is executed once at the beginning to signal the need to output a header row before the first data row.
$_.psobject.properties
是输入对象上定义的所有属性的集合,以标题列命名,并包含给定数据行的值.
$_.psobject.properties
is the collection of all properties defined on the input object, named for the header columns, and containing a given data row's values.
$_.psobject.properties.Name -join ','
输出标题行,只需将属性名称 - 即列标题 - 与 ,
产生单个输出字符串.
$_.psobject.properties.Name -join ','
outputs the header row, simply by joining the property names - which are the column headers - with ,
to yield a single output string.
$_.psobject.properties.Value -replace ',', ''
删除任何值内部的 ,
实例(用空字符串替换它们),并且 -join ','
再次将结果值与 ,
连接起来,输出一个数据行.
$_.psobject.properties.Value -replace ',', ''
removes any value-internal ,
instances (replaces them with the empty string), and -join ','
again joins the resulting values as-is with ,
, outputting a data row.
Set-Content
- 这里比 Out-File
更可取,因为输出对象已经是 strings - 被使用写入输出文件.
Set-Content
- which is preferable to Out-File
here, because the output objects are already strings - is used to write to the output file.
注意-Encoding
参数来控制输出字符编码-根据需要进行调整.
Note the -Encoding
parameter to control the output character encoding -adjust as needed.
在 Windows PowerShell(版本高达 v5.1)中,不使用 -Encoding
将默认为您系统的ANSI"编码.代码页(即使帮助主题声称是 ASCII),而 Out-File
将默认为 UTF-16LE(Unicode").
In Windows PowerShell (versions up to v5.1), not using -Encoding
would default to your system's "ANSI" code page (even though the help topic claims ASCII), whereas Out-File
would default to UTF-16LE ("Unicode").