首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell导出-csv异常行为

powershell导出-csv异常行为
EN

Stack Overflow用户
提问于 2022-01-15 11:33:01
回答 2查看 62关注 0票数 0

我在向CSV输出产品方面遇到了不寻常的困难。使用下面列出的代码,我能够完成我所需要的大部分工作,这是一个文件列表,其中特殊字符被通配符替换,分组并列出只有扩展名不同的文件。

代码语言:javascript
复制
$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方法时,我发现其中一个组没有按我希望的方式导出。

如果我将部分代码包装在括号中并添加计数,如下所示

代码语言:javascript
复制
($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

我得到不同的价值后,然后分别出口每一组。

以下所述罪犯

代码语言:javascript
复制
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个组)。对于如何增加计数值或合并上述组有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-17 12:09:11

在对脚本的创建方式进行了一些调查之后,文件和

代码语言:javascript
复制
$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输出和分组对象编号之间没有差异。只是我的误解。

代码语言:javascript
复制
 Where {@($_.Group.Extension |Sort -Unique).Count -ge 2}

上面的行应该对组进行筛选,并包括至少有两个扩展的部分。就像幸运女士所做的那样,只有一组有莫里的档案符合标准,所以我很困惑。

票数 0
EN

Stack Overflow用户

发布于 2022-01-15 14:18:01

试着用出口的方式来计数。

代码语言:javascript
复制
($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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70721015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档