在foreach循环中更新CSV文件

时间:2019-06-07 14:12:21

标签: powershell csv variables foreach

我在PowerShell中有一个foreach循环。它会通过一些用户根据CSV文件移动数据来运行。 我想为每条跑过的蜜蜂更新CSV文件,因此CSV如下所示:

Username;OldData;NewData;Status
User1;c:\Old;c:\new;Waiting
User2;d:\Old;D:\New;Waiting

作为第一个foreach循环的最后一行(假设数据已复制),将CSV更改为:

Username;OldData;NewData;Status
User1;c:\Old;c:\new;Done
User2;d:\Old;D:\New;Waiting

在User2完成更新后,再次将其更新为:

Username;OldData;NewData;Status    
User1;c:\Old;c:\new;Done
User2;d:\Old;D:\New;Done

我现在要做的是导入

$Table = Import-Csv c:\csv.csv

然后运行foreach(伪代码)

foreach ($Row in $Table) {
    Copy-Content $row.OldData $row.NewData
    Update-Csv $row.Status = "Done"
}

1 个答案:

答案 0 :(得分:2)

遵循@AnsgarWiechers提示后,使用

保存更改后的$ Table
$Table | Export-Csv C:\csv.csv -NoTypeInformation

为避免在连续运行中多次处理同一行,请排除状态为Done的行。

## Q:\Test\2019\06\07\SO_56495983.ps1

$File = '.\csv.csv' # 'c:\csv.csv'  #
$Table = Import-Csv $File -Delimiter ';'

foreach ($Row in ($Table|Where Status -eq 'Waiting')) {
    #Copy-Content $row.OldData $row.NewData
    $row.Status = "Done"
}

$Table
$Table | Export-Csv $File  -Delimiter ';' -NoTypeInformation