如何处理同一项目的多个命令;以这个例子为例,我想同时显示文件名和上次写入日期,但只显示文件名:

PS C:\Users\demo> ls *.zip | % { Write-Host $_.FullName }  | % { Write-Host $_.LastTimeWrite }
C:\Users\demo\archive.zip

最佳答案

首先, FileInfo 属性被称为 LastWriteTime - 而不是 LastTimeWrite

您可以使用 格式字符串 ,例如:

ls *.zip | % { Write-Host ("{0} {1}" -f $_.FullName, $_.LastWriteTime) }

或者您使用 分号 来分隔命令:
ls *.zip | % { Write-Host $_.FullName; Write-Host $_.LastWriteTime }

在写主机的情况下,你也可以写
ls *.zip | % { Write-Host $_.FullName $_.LastWriteTime }

您的管道无法按预期工作的原因有两个:
  • Write-Host 将输出写入主机环境(即控制台),因此没有任何东西可以进入下一个管道步骤。如果需要进一步处理结果,请使用 Write-OutputSelect-Object 而不是 Write-Host
  • 即使您没有将输出写入宿主环境,管道中的下一步也不会有与当前步骤相同的输入,因为您在当前步骤中将 FileInfo 对象转换为字符串。
  • 关于powershell - Powershell 中的多个管道,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32837486/

    10-13 07:53