Powershell 对 .csv 对象执行 -replace
Powershell performing -replace on .csv object
相当简单的请求,但很费劲。
我有一个包含 30 列的 .csv 文件。一栏 'sku' 中有我需要修改的产品代码。
然后我需要将所有数据(包括修改后的列)写回原始文件。
到目前为止,我已经 select 编辑并扩展了 'sku' 对象,并使用一些正则表达式进行了修改,这按预期工作。
但是,如果我使用 Export-Csv 导出文件,我只会得到文本 属性 值 .length。
我怀疑是因为 -replace 隐式地将对象转换为字符串?
此外,我没有 select 任何其他列,因为我不知道如何 select 所有其他属性并一起进行 -replace。
请帮帮我。
$CSVFiles = Get-ChildItem -Path D:\Exports\Test\AMAZON -File -Filter '*.csv' | Where Extension -eq '.csv'
foreach ($csv in $CSVFiles) {
$csvOutput = Import-Csv $csv.FullName
$sku = $csvOutput | Select-Object -ExpandProperty sku |
Foreach-Object {$_ -replace '^.*?(?=T)',''} |
Export-Csv $csv.FullName -NoType
}
使用 Select-Object -ExpandProperty
,您可以将具有属性的丰富而强大的对象变成愚蠢的文本。 ;-)
这应该更接近您的需要:
$CSVFiles =
Get-ChildItem -Path D:\Exports\Test\AMAZON -File -Filter '*.csv'
foreach ($csv in $CSVFiles) {
$csvOutput = Import-Csv $csv.FullName
$csvOutput |
Foreach-Object {
$_.sku = $_.sku -replace '^.*?(?=T)'
$_
} |
Export-Csv -Path $csv.FullName -NoTypeInformation -Force
}
相当简单的请求,但很费劲。 我有一个包含 30 列的 .csv 文件。一栏 'sku' 中有我需要修改的产品代码。 然后我需要将所有数据(包括修改后的列)写回原始文件。
到目前为止,我已经 select 编辑并扩展了 'sku' 对象,并使用一些正则表达式进行了修改,这按预期工作。
但是,如果我使用 Export-Csv 导出文件,我只会得到文本 属性 值 .length。 我怀疑是因为 -replace 隐式地将对象转换为字符串?
此外,我没有 select 任何其他列,因为我不知道如何 select 所有其他属性并一起进行 -replace。
请帮帮我。
$CSVFiles = Get-ChildItem -Path D:\Exports\Test\AMAZON -File -Filter '*.csv' | Where Extension -eq '.csv'
foreach ($csv in $CSVFiles) {
$csvOutput = Import-Csv $csv.FullName
$sku = $csvOutput | Select-Object -ExpandProperty sku |
Foreach-Object {$_ -replace '^.*?(?=T)',''} |
Export-Csv $csv.FullName -NoType
}
使用 Select-Object -ExpandProperty
,您可以将具有属性的丰富而强大的对象变成愚蠢的文本。 ;-)
这应该更接近您的需要:
$CSVFiles =
Get-ChildItem -Path D:\Exports\Test\AMAZON -File -Filter '*.csv'
foreach ($csv in $CSVFiles) {
$csvOutput = Import-Csv $csv.FullName
$csvOutput |
Foreach-Object {
$_.sku = $_.sku -replace '^.*?(?=T)'
$_
} |
Export-Csv -Path $csv.FullName -NoTypeInformation -Force
}