1

我可以做类似的事情

ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir

将自定义表达式(在本例中$_ | Split-Path)选择为一个简单的值数组。

有没有办法将两个 select 语句合并为一个,仍然产生相同的结果?

4

2 回答 2

0

你想做什么?您可以使用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")
于 2017-10-30T09:42:54.247 回答
0

我认为 OP 正在寻找ForEach-ObjectMSDN),它对输入对象集合中的每个项目执行操作。它类似于其他语言中的maporSelect操作。

所以而不是:

ls . `
| select @{ Name="Dir"; Expression = { $_ | Split-Path } } `
| select -ExpandProperty Dir

你要:

ls . `
| ForEach-Object { $_ | Split-Path }

您也可以替换ForEach-Object%. 但对于新的 PowerShell 用户来说,它的可读性和可搜索性较差:

ls . `
| % { $_ | Split-Path }
于 2019-06-14T16:24:47.920 回答