我可以做类似的事情
ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir
将自定义表达式(在本例中$_ | Split-Path
)选择为一个简单的值数组。
有没有办法将两个 select 语句合并为一个,仍然产生相同的结果?
我可以做类似的事情
ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir
将自定义表达式(在本例中$_ | Split-Path
)选择为一个简单的值数组。
有没有办法将两个 select 语句合并为一个,仍然产生相同的结果?
你想做什么?您可以使用ls
/Get-ChildItem
和获得相同的结果Split-Path
。不确定您是否需要该Microsoft.PowerShell.Core\FileSystem::
零件。
PS C:\Path\To\Dir> Get-ChildItem | Split-Path
Microsoft.PowerShell.Core\FileSystem::C:\Path\To\Dir
Microsoft.PowerShell.Core\FileSystem::C:\Path\To\Dir
Microsoft.PowerShell.Core\FileSystem::C:\Path\To\Dir
PS C:\Path\To\Dir> (Get-ChildItem).FullName | Split-Path
C:\Path\To\Dir
C:\Path\To\Dir
C:\Path\To\Dir
编辑
假设nuget list <my-package>
输出一个字符串数组,您可以使用-replace
和正则表达式($
匹配字符串结尾)来操作它并获得一个结果数组。
$((nuget list <my-package>).Replace(" ",",") -replace "$",".nupkg")
我认为 OP 正在寻找ForEach-Object
(MSDN),它对输入对象集合中的每个项目执行操作。它类似于其他语言中的map
orSelect
操作。
所以而不是:
ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir
你要:
ls . `
| ForEach-Object { $_ | Split-Path }
您也可以替换ForEach-Object
为%
. 但对于新的 PowerShell 用户来说,它的可读性和可搜索性较差:
ls . `
| % { $_ | Split-Path }