我有一個子目錄,每周我都會將 CSV 檔案轉儲到其中。我希望獲取檔案,根據內容洗掉某些檔案,然后在“已過濾”子目錄中重寫檔案。它必須是一個單一的班輪。
我來的最接近的是,將結果作為單個檔案提供。我想'決議一個 csv,過濾它,用原始檔案名的版本保存它,然后到下一個檔案,下一個檔案等。資料是 8 個小 3 個欄位 CSV 的系列。
(示例)源 CSV:
"Test","Tested","Total"
"2021-A-0123","12","20"
"2021-B-0125","15","19"
"2021-A-0123-S","10","11"
"2022-A-0126","10","11"
** 代碼:**
Import-Csv -Path (Get-ChildItem -Path 'C:\Users\me\Documents\' -Filter '*.csv').FullName | where-object {$_."Test" -Match "^202[1,2]-A-[0-9]{4}$"}
結果
Test Tested Total
-------- ---------- -----
2021-A-0123 12 20
2022-A-0126 10 11
2021-A-0123 12 20
2022-A-0126 10 11
2021-A-0123 12 20
2022-A-0126 10 11
2021-A-0123 12 20
2022-A-0126 10 11
2021-A-0123 12 20
2022-A-0126 10 11
uj5u.com熱心網友回復:
如果我理解正確,您只需要遍歷每個CSV并在過濾后保存每個新版本。
在這里你只需要定義初始檔案夾和目標檔案夾,這兩個變數都定義在腳本的頂部。代碼可能比實際需要的更冗長,但我相信這樣更好,因此您可以遵循思考程序。
在這種情況下(我認為在大多數情況下),如果其他人正在閱讀您的代碼,則單行代碼可能很難閱讀并且難以維護。
$initialFolder = 'path/to/csvFolder'
$destinationFolder = 'path/to/filteredCsvFolder'
foreach($file in Get-ChildItem $initialFolder -Filter *.csv)
{
$fileName = "{0} - FILTERED" -f $file.Name
$exportPath = Join-Path $destinationFolder -ChildPath $fileName
Import-Csv $file |
Where-Object { $_.Test -Match "^202[1,2]-A-[0-9]{4}$" } |
Export-Csv $exportPath -NoTypeInformation
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368692.html
