Powershell正在对.csv对象执行-替换

Powershell正在对.csv对象执行-替换,powershell,replace,export-csv,Powershell,Replace,Export Csv,请求相当简单,但很困难。 我有一个包含30列的.csv文件。一列“sku”中有我需要修改的产品代码。 然后,我需要将所有数据(包括修改的列)写回原始文件 到目前为止,我已经选择并扩展了“sku”对象,并使用了一些正则表达式来进行修改,这是可以预期的 但是,如果使用export Csv导出文件,则只会获得文本属性值.length。 我怀疑是因为-replace隐式地将对象转换为字符串 此外,我没有选择任何其他列,因为我不知道如何选择所有其他属性并一起执行-replace 请帮帮我 $CSVFile

请求相当简单,但很困难。 我有一个包含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
} 

使用
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
} 

至于你为什么用你目前的方法失败-你扔掉了除SKU价值以外的所有东西。。。你希望在那之后看到什么?[grin]///CsvOutput中的集合进行迭代,修改目标属性中的值,然后导出完整的对象集合。@Lee\u Dailey是的,我知道你为什么要grin。我明白你的意思。我只是不知道怎么做:)我看到
Olaf
展示了一个似乎能满足您需求的解决方案。很高兴知道你已经开始工作了。。。[grin]嗨,奥拉夫,你的建议给了我$u的长度。sku属性Lee_Dailey是正确的,因为我需要遍历$CSVOUT。但我不知道how@ColinA你说得对。相应地更改了代码。谢谢。这很好用。您能解释一下吗,-replace如何知道如何将T之前的字符替换为空,因为下面的“”已被删除?@ColinA您提供了正则表达式模式!;-)。。。如果您只是想从字符串中删除某些内容,可以省略命令中的“替换为”部分。抱歉,我很困惑。我认为通常的语法应该是-replace'^.*(?=T)”,“我的理解是,我给出了-replace搜索模式,然后告诉它,”,以“将它找到的任何东西替换为零”。但是,在您的代码中删除了“”,那么它如何知道用什么替换匹配模式呢?您的意思是-replace'^.*?(?=T)'自动删除匹配项,并且只有当我想用其他内容替换匹配项时,我才会使用:-replace'^.*(?=T)',“其他内容”?