gpt4 book ai didi

powershell - 管道和 foreach 循环

转载 作者:行者123 更新时间:2023-12-02 23:27:04 25 4
gpt4 key购买 nike

最近,我一直在玩 PowerShell,我注意到在使用管道和 foreach 时出现了一些奇怪的行为。我无法理解的循环。

这个简单的代码有效:

$x = foreach ($i in gci){$i.length}
$x | measure -max

说得通。

但这段代码不会:
foreach ($i in gci){$i.length} | measure -max

我收到以下错误:

An empty pipe element is not allowed.
At line:1 char:33
+ foreach ($i in gci){$i.length} | <<<< measure -max
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : EmptyPipeElement

这两种方法有什么区别,为什么第二种方法会失败?

最佳答案

foreach语句不使用管道架构,因此其输出不能直接传递到管道(即逐项)。能够传递来自 foreach 的输出循环到管道,您必须在子表达式中运行循环:

$(foreach ($item in Get-ChildItem) { $item.Length }) | ...

或先将其收集在变量中:
$len = foreach ($item in Get-ChildItem) { ... }
$len | ...

如果要在管道中处理数据,请使用 ForEach-Object cmdlet 代替:
Get-ChildItem | ForEach-Object { $_.Length } | ...

进一步解释 foreach 之间的差异声明和 ForEach-Object cmdlet 见 Scripting Guy blogchapter on loops来自 Master-PowerShell。

关于powershell - 管道和 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com