我正在尝试创建以下内容:
Get-ChildItem -path *.txt* -recurse | $a = $_.Name.Length | Format-Table Name, $a
这是一个人为的例子,但我假设我想多次使用$_Name.Length
,但在其位置替换$1
或$a
。
我如何做到这一点?
答案 0 :(得分:2)
使用中间计算属性:
Get-ChildItem -Path *.txt* -Recurse | Select-Object *, @{ n='a'; e={ $_.Name.Length } } |
Format-Table Name, a
注意:
这使用输出对象上的属性而不是变量来携带感兴趣的值。
这样做会将通过管道传递的对象类型更改为[pscustomobject]
类型 - 具有添加的a
属性的自定义类型。这可能是也可能不是问题(不管道问题Format-Table
)。
相比之下,如果你的计划是简单地处理ForEach-Object
进程块中的输入对象,你可以简单地在该块中定义一个变量:
Get-ChildItem -Path *.txt* -Recurse | ForEach-Object {
$a=$_.Name; $a.Substring(0, $a.IndexOf('.txt'))
}
(顺便说一下:这个示例命令并不严格需要辅助变量,因为它可以更简洁地表达为:
Get-ChildItem -Path *.txt* -Recurse | ForEach-Object { $_.Name -replace '\.txt.*$' }
)。