gpt4 book ai didi

powershell - Powershell foreach-object循环似乎并不总是为每个对象运行过程 block

转载 作者:行者123 更新时间:2023-12-03 00:38:11 26 4
gpt4 key购买 nike

当我运行get-childitem charsets.pack时,我看到:

PS C:\opt\jdk\jdk7u67\jre\lib> Get-ChildItem .\charsets.pack


Directory: C:\opt\jdk\jdk7u67\jre\lib


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014-07-25 10:24 AM 2172877 charsets.pack

因此,当我运行 Get-ChildItem *.pack | ForEach-Object -Process {get-childitem $_.name}时,我希望看到每个文件都重复前面的输出。相反,我得到
PS C:\opt\jdk\jdk7u67\jre\lib> Get-ChildItem *.pack | ForEach-Object -Process {get-childitem $_.name}


Directory: C:\opt\jdk\jdk7u67\jre\lib


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014-07-25 10:24 AM 2172877 charsets.pack
-a--- 2014-07-25 10:24 AM 1940370 deploy.pack
-a--- 2014-07-25 10:24 AM 221856 javaws.pack
-a--- 2014-07-25 10:24 AM 4163103 jfxrt.pack
-a--- 2014-07-25 10:24 AM 176166 jsse.pack
-a--- 2014-07-25 10:24 AM 532239 plugin.pack
-a--- 2014-08-11 11:30 AM 18345177 rt.pack

是什么赋予了?看起来实际上并没有为每个对象运行流程块,而是在进行某种优化。但是,当我运行 Get-ChildItem *.pack | ForEach-Object -Process {Get-Date}时,我得到的正是我所期望的:
PS C:\opt\jdk\jdk7u67\jre\lib> Get-ChildItem *.pack | ForEach-Object -Process {Get-Date}

Monday, 11 August, 2014 12:11:30
Monday, 11 August, 2014 12:11:30
Monday, 11 August, 2014 12:11:30
Monday, 11 August, 2014 12:11:30
Monday, 11 August, 2014 12:11:30
Monday, 11 August, 2014 12:11:30
Monday, 11 August, 2014 12:11:30

Fwiw,我更习惯于扑朔迷离,并且可能正在带来那些期望。

最佳答案

我认为真正的问题是您误解了管道的工作原理。您的ForEach正在向管道输出[FileInfo]对象,由于未指定输出,因此在管道的末端,它将到达管道末端的所有内容输出到格式化程序,并将集合指定为[FileInfo]对象的数组,并且显示它们,如OP中所示。

如果要查看每个文件的输出,则必须将Get-ChildItem传递到Out-String或ForEach循环中的诸如此类。尽管实际上这只是在做双重工作,因为原始的Get-ChildItem将[FileInfo]对象传递到ForEach循环,并执行Get-ChildItem $_.Name(您可能在那里表示FullName)提供了完全相同的[FileInfo]对象,因此可以缩短为$_ | Out-String

因此,实际上,您不是在ForEach循环期间将其输出到主机,而是仅将FileInfo对象馈送到ForEach循环中进行处理,然后查找该对象并将其提供给管道,以便稍后进行输出,就像您的ForEach循环不存在。

我希望这有助于清理问题。

关于powershell - Powershell foreach-object循环似乎并不总是为每个对象运行过程 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25250707/

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