首页 > 解决方案 > Powershell 在 .csv 对象上执行 -replace

问题描述

相当简单的请求,但很挣扎。我有一个包含 30 列的 .csv 文件。一列“sku”中有我需要修改的产品代码。然后我需要将包括修改列在内的所有数据写回原始文件。

到目前为止,我已经选择并扩展了“sku”对象并使用了一些正则表达式进行修改,这可以按预期工作。

但是,如果我使用 Export-Csv 导出文件,我只会得到文本属性值 .length。我怀疑是因为 -replace 隐式地将对象转换为字符串?

此外,我没有选择任何其他列,因为我不知道如何选择所有其他属性并一起执行 -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
} 

标签: powershellreplaceexport-csv

解决方案


随着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
} 

推荐阅读