Обновить файл CSV в цикле foreach - PullRequest
0 голосов
/ 07 июня 2019

У меня есть петля foreach в PowerShell. Некоторые пользователи перемещают данные на основе файла 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

Что я сейчас делаю, так это импортирую CSV с

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

и затем выполните foreach (псевдокод)

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

1 Ответ

2 голосов
/ 07 июня 2019

Следуя подсказке @ AnsgarWiechers , сохраните измененную таблицу $ с

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...