我在將輸出匯出到 CSV 時遇到了不尋常的問題。使用下面列出的代碼,我基本上可以完成我需要的作業,這是一個檔案串列,其中特殊字符被通配符替換,分組并列出了只有擴展名不同的地方。
$path = gci "somepath" -File -Recurse -ErrorAction Continue
$path|
Select @{l="Algorithm";e={}}, @{l="Hash";e={}}, @{l='File';e={$_.PSChildName}}, @{l='Compare Filename';e={$_.BaseName.replace('_','*').replace(' ','*').replace('-','*')}}, @{l="Path";e={$path $_.PSParentPath.Substring(40,$_.PSParentPath.Length-40)}}, @{l="Link";e={$path $_.FullName.substring(2,$_.FullName.Length-2)}}, @{l="Extension";e={$_.Extension}}|
group -Property 'Compare Filename'|
Where {@($_.Group.Extension |Sort -Unique).Count -ge 2}|
%{$_.group}|
Export-Csv -Path $CSV_path -NoTypeInformation
但是,我在使用 .Count 方法時發現其中一個組沒有按照我想要的方式匯出。
如果我將部分代碼括在括號中并添加計數,就像這樣
($path|
Select @{l="Algorithm";e={}}, @{l="Hash";e={}}, @{l='File';e={$_.PSChildName}}, @{l='Compare Filename';e={$_.BaseName.replace('_','*').replace(' ','*').replace('-','*')}}, @{l="Path";e={$path $_.PSParentPath.Substring(40,$_.PSParentPath.Length-40)}}, @{l="Link";e={$path $_.FullName.substring(2,$_.FullName.Length-2)}}, @{l="Extension";e={$_.Extension}}|
group -Property 'Compare Filename'|
Where {@($_.Group.Extension |Sort -Unique).Count -ge 2}).count
然后分別匯出每個組后,我得到不同的值。
下面提到的罪魁禍首
File Compare Filename Extension
MV_CHIK_202_ELISA_MEASLES_20180423.csv MV*CHIK*202*ELISA*MEASLES*20180423 .csv
MV_CHIK_202_ELISA_MEASLES_20180423.xlsx MV*CHIK*202*ELISA*MEASLES*20180423 .xlsx
MV_CHIK_202_ELISA_MEASLES_20180423.csv MV*CHIK*202*ELISA*MEASLES*20180423 .csv
MV_CHIK_202_ELISA_MEASLES_20180423.xlsx MV*CHIK*202*ELISA*MEASLES*20180423 .xlsx
如您所見,這 4 個檔案應該在一個組中(基于“比較檔案名”屬性),但是當整個串列通過管道傳輸到 %{$_.group} 時,get 拆分會導致條目數不正確。在這種情況下 .count 回傳值 '42' 但 export-csv 產生 86 行(基本上意味著 43 個組)。關于如何增加計數值或組合上述組的任何想法?
uj5u.com熱心網友回復:
嘗試以與匯出相同的方式計數。
($path|
Select @{l="Algorithm";e={}}, @{l="Hash";e={}}, @{l='File';e={$_.PSChildName}}, @{l='Compare Filename';e={$_.BaseName.replace('_','*').replace(' ','*').replace('-','*')}}, @{l="Path";e={$path $_.PSParentPath.Substring(40,$_.PSParentPath.Length-40)}}, @{l="Link";e={$path $_.FullName.substring(2,$_.FullName.Length-2)}}, @{l="Extension";e={$_.Extension}}|
group -Property 'Compare Filename'|
Where {@($_.Group.Extension |Sort -Unique).Count -ge 2}|
%{$_.count}).count
uj5u.com熱心網友回復:
在對腳本的創建方式進行了一些調查之后,檔案被過濾并輸出
$path = gci "somepath" -File -Recurse -ErrorAction Continue
$path|
Select @{l="Algorithm";e={}}, @{l="Hash";e={}}, @{l='File';e={$_.PSChildName}}, @{l='Compare Filename';e={$_.BaseName.replace('_','*').replace(' ','*').replace('-','*')}}, @{l="Path";e={$path $_.PSParentPath.Substring(40,$_.PSParentPath.Length-40)}}, @{l="Link";e={$path $_.FullName.substring(2,$_.FullName.Length-2)}}, @{l="Extension";e={$_.Extension}}|
group -Property 'Compare Filename'|
Where {@($_.Group.Extension |Sort -Unique).Count -ge 2}
我意識到腳本完全按照它應該做的事情做,實際上 csv 輸出和分組物件編號之間沒有差異。只是我的一個誤解。
Where {@($_.Group.Extension |Sort -Unique).Count -ge 2}
上面的行應該篩選組并包括至少存在兩個擴展的那些。幸運的是,只有一組有兩個以上的檔案符合標準,因此我很困惑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/414564.html
標籤:
