首页 > 解决方案 > 在 foreach 循环中更新 CSV 文件

问题描述

foreach在 PowerShell 中有一个循环。它通过一些用户移动基于 CSV 文件的数据运行。我想为蜜蜂运行的每一行更新 CSV 文件,所以 CSV 看起来像这样:

用户名;旧数据;新数据;状态
用户 1;c:\Old;c:\new;等待
用户 2;d:\Old;D:\New;Waiting

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

用户名;旧数据;新数据;状态
用户 1;c:\Old;c:\new;完成
用户 2;d:\Old;D:\New;Waiting

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

用户名;旧数据;新数据;状态    
用户 1;c:\Old;c:\new;完成
用户 2;d:\旧;D:\新;完成

我现在要做的是导入 CSV

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

然后运行foreach(伪代码)

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

标签: powershellcsvvariablesforeach

解决方案


遵循@AnsgarWiechers提示后,将更改的 $Table 保存为

$Table | Export-Csv C:\csv.csv -NoTypeInformation

为避免在连续运行中多次处理同一行,请排除带有 Status 的行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

推荐阅读