我在向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生成86行(基本上意味着43个组)。对于如何增加计数值或合并上述组有什么想法吗?
发布于 2022-01-17 12:09:11
在对脚本的创建方式进行了一些调查之后,文件和
$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}上面的行应该对组进行筛选,并包括至少有两个扩展的部分。就像幸运女士所做的那样,只有一组有莫里的档案符合标准,所以我很困惑。
发布于 2022-01-15 14:18:01
试着用出口的方式来计数。
($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}).counthttps://stackoverflow.com/questions/70721015
复制相似问题