假设我有一份物品清单。我想导出到csv,但我想在此之前做一些计算/修改。
基本上,设置如下所示:
PS C:\Files> gci
Directory: C:\Files
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 10/23/2014 6:03 PM 11084 Blob.txt
-a--- 10/13/2014 1:32 PM 31591 dates.txt
-a--- 2/11/2014 1:46 PM 11990 out.txt
PS C:\Files> $data = gci而且我可以很容易地选择我想要放入CSV的项目。为简洁起见,省略了实际的Export-CSV部分
PS C:\Files> $data | Select-Object FullName,name但我真正想做的是计算一些列,并将那些列包括在CSV中。举个例子,假设我想计算一下'\‘字符,以了解文件夹的深度。我想你可以知道我在这里尝试的是什么,即使它出错了。
PS C:\Files> $data | Select-Object FullName,name,FullName.Split('\').Count
Select-Object : A positional parameter cannot be found that accepts argument '1'. 有没有办法让它起作用呢?
发布于 2014-10-25 03:51:21
您需要的是一个calculated property (感谢Ansgar Wiechers更正了我的术语并提供了一个链接)来为您做这件事。您可以在Select命令中创建一种即兴哈希表来完成此操作,如下所示:
PS C:\Files> $data | Select-Object FullName,name,@{name='FolderDepth';expression= {$_.FullName.Split('\').Count}}这可以缩写为@{n='Name';e={scriptblock}},其中n代表名称,并且可以与l (label的缩写)互换。e是expression的缩写。
发布于 2014-10-25 03:49:32
是。您正在寻找的是使用calculated property的更复杂的Select-Object语句。语法示例:
@{Label = "Calculation";Expression ={$_.FullName.Split('\').Count}}
然后将其插入到select语句中,通常使用其他变量。
$data | Select-Object FullName,name,@{Label = "TheCount";Expression ={$_.FullName.Split('\').Count}}发布于 2014-10-25 04:16:49
我的建议(也比在select中更具可读性):
$data | % {Add-Member -name FolderDepth -Value $_.FullName.split("\").Count -MemberType NoteProperty -InputObject $_} | select FullName,Name,FolderDepth这将向$data添加一个属性,您可以像任何其他属性一样在管道中通过$_.FolderDepth进一步使用该属性。
这个属性的不同之处在于,如果您想在以后使用它进行操作,那么在管道之后也可以使用该属性
https://stackoverflow.com/questions/26555204
复制相似问题