在不覆盖现有数据的情况下更新.csv中的数据/在powershell中添加新数据

在不覆盖现有数据的情况下更新.csv中的数据/在powershell中添加新数据,powershell,csv,merge,updates,Powershell,Csv,Merge,Updates,又是我,Powershell的新手(到现在为止,我已经在Powershell工作了11天) 到目前为止,我遇到的问题是什么: 我从不同的文件夹中读取csv文件,并将数据合并到一个大csv(bigCSV)中。 bigCSV是一个活生生的文档,因此我正在手动将数据添加到此工作表中 问题是,如果我必须更新bigCSV(使用新的csv文件),现有的bigCSV将被覆盖,我手动添加的数据将丢失 我曾尝试在代码中添加-append,但结果并不令人满意,因为手动添加的数据仍然有效,但现在我有了重复的数据

又是我,Powershell的新手(到现在为止,我已经在Powershell工作了11天)

到目前为止,我遇到的问题是什么: 我从不同的文件夹中读取csv文件,并将数据合并到一个大csv(bigCSV)中。 bigCSV是一个活生生的文档,因此我正在手动将数据添加到此工作表中

问题是,如果我必须更新bigCSV(使用新的csv文件),现有的bigCSV将被覆盖,我手动添加的数据将丢失

我曾尝试在代码中添加-append,但结果并不令人满意,因为手动添加的数据仍然有效,但现在我有了重复的数据

这是我到目前为止的代码

$Userpath_Access    = "$PSScriptRoot"
$txtFiles = Get-ChildItem -Path $Userpath_Access\txt-Import-Datenbank\ -Filter *.csv -Recurse -ErrorAction SilentlyContinue -Force

$csv = foreach ($file in $txtFiles) {
        Import-Csv -Path $file.FullName -Delimiter ";" | 
                      Select-Object 'Type (BAY)', 'Order Number (BAY)', 'PCP Number (PCP)', @{label='Project ID (Mosaic)';expression={$($_.'Project')}}, 'Priority (BAY)', @{label='Compound No (Mosaic)';expression={$($_.'Compound No')}},
                      @{label='Customer (Mosaic)';expression={$($_.'Requestor')}}, @{label='Date Order Created (Mosaic)';expression={$($_.'Order Date')}},  @{label='Comment (Mosaic)';expression={$($_.'Comment')}}, 'Status', 'Data Finalized', @{label='Compound Amount [mg] (Mosaic)';expression={$($_.'Amount')}},
                      'Mail Address', 'Duration', @{label='Name Of Customer (Mosaic)';expression={$($_.'Requestor')}}, @{label='Vial (Mosaic)';expression={$($_.'Vial')}}, @{label='Mosaic File (Mosaic)';expression={$($_.'Filename')}}, @{label='Date Received (Mosaic)';expression={$($_.'Data import')}},
                      @{label='Order ID (Mosaic)';expression={$($_.'Order ID')}}
}

$fileOut = Join-Path -Path $Userpath_Access -ChildPath ('Inh_Auftragsliste.csv')
$csv | Export-Csv -Path $fileOut -Delimiter ";" -NoTypeInformation -Append

现在我正在寻找一个解决方案,只需将“新文件”添加到现有的bigCSV中。

您可以将CSV文件导入Excel,对其进行排序并使用-Unique标志,然后再次导出

Import-Csv C:\temp\UsersConsolidated.csv | sort lname,fname –Unique | Export-Csv C:\temp\UsersConsolidated.csv

我认为在导出到CSV时,没有办法处理它。

如果我正确理解了这个问题,您的代码就离您不远了。 最主要的是,我认为您需要将导入Csv转换后的数据添加到循环中的大Csv文件

尝试:

次要细节,但我已对引用和不必要的
$()
进行了一些更改

查看,如果我理解正确,您必须对列表进行如下操作:

$Old = Import-Csv .\Old.csv
$Old | Merge-Object $New -on Filename

Date       Filename  Type (BAY) ...
----       --------  ---------- ---
2020-08-01 File1.csv Type 1     Info 1
2020-08-04 File2.csv Type 2     Info 2
2020-08-03 File3.csv Type 3
2020-08-04 File4.csv Type 4     Info 4

以及:

如果使用此选项(另请参见:),则可以合并两个列表,如下所示:

$Old = Import-Csv .\Old.csv
$Old | Merge-Object $New -on Filename

Date       Filename  Type (BAY) ...
----       --------  ---------- ---
2020-08-01 File1.csv Type 1     Info 1
2020-08-04 File2.csv Type 2     Info 2
2020-08-03 File3.csv Type 3
2020-08-04 File4.csv Type 4     Info 4

我们没有收到你的来信。。给出的答案解决了你的问题吗?如果是,请点击✓ 在左边。这将帮助其他有类似问题的人更容易找到它。我很抱歉。。。科罗纳抓住了我,我完全没有给出反馈-(哇,太重了……希望你现在感觉好些。是的,我又恢复了健康,我希望,从现在起我能免疫。)
Date       Filename  Type (BAY) ...
----       --------  ---------- ---
2020-08-04 File2.csv Type 2     Info 2
2020-08-04 File4.csv Type 4     Info 4
$Old | Merge-Object $New -on Filename

Date       Filename  Type (BAY) ...
----       --------  ---------- ---
2020-08-01 File1.csv Type 1     Info 1
2020-08-04 File2.csv Type 2     Info 2
2020-08-03 File3.csv Type 3
2020-08-04 File4.csv Type 4     Info 4