当我运行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:30Fwiw,我更习惯于抨击,并且可能带来了这些期望。
发布于 2014-08-11 20:42:26
我认为真正的问题是你误解了管道的工作原理。您的ForEach正在将一个[ FileInfo ](http://msdn.microsoft.com/en-us/library/system.io.fileinfo(v=vs.110%29.aspx)对象输出到管道的末端,因为它没有指定输出,因此它将到达管道末端的所有内容输出到格式化程序,并将集合指定为FileInfo对象的数组并显示它们,如OP所示。
如果您想要查看每个文件输出,您必须将Get-ChildItem输送到Out-String,或者在ForEach循环中这样做。虽然这实际上是在做双重的工作,因为最初的Get将FileInfo对象传递给ForEach循环,而执行Get-ChildItem $_.Name (您可能在那里指的是FullName )提供了完全相同的FileInfo对象,因此可以缩短为$_ | Out-String。
因此,在ForEach循环期间,您实际上没有输出到主机,您只是将一个FileInfo对象输入到要处理的ForEach循环中,然后查找该对象并在管道中提供该对象以延迟输出,就好像您的ForEach循环不存在一样。
我希望这能帮你理清问题。
发布于 2014-08-11 20:10:22
Get-ChildItem基本上相当于dir和ls (PowerShell实际上将这些化名为Get-ChildItem)。
因此,就像现在一样,您正在尝试为单个文件获取子文件(而他们没有子文件)。另一种方法是调用Get-Item $_.Name,尽管这看起来有点傻,因为它的输出将是$_首先引用的相同对象。
我可能误解了您想要的内容,但我认为您只需要在您的块中使用$_即可。
https://stackoverflow.com/questions/25250707
复制相似问题