关于使用PowerShell Select-String, exiftool(-k) 的问题

Question about using PowerShell Select-String, exiftool(-k)

在 PowerShell 脚本中,我尝试使用 Select-String 过滤下面 exiftool(-k).exe 命令的输出。

我尝试了很多排列组合,但 none 有效,而且我总是看到未过滤的输出。我需要做什么来过滤这个命令的输出?

Start-Process -FilePath "C:\PowerShell\exiftool(-k).exe" -ArgumentList test.jpg |
  Select-String -pattern 'GPS' -SimpleMatch

命名不便。将其重命名为 exiftool.exe 和 运行 不启动进程。

rename-item 'exiftool(-k).exe' exiftool.exe    

C:\Users\bfbarton\PowerShell\exiftool.exe test-jpg | Select-String GPS 

或者

$env:path += ';C:\Users\bfbarton\PowerShell'
exiftool test.jpg | Select-String GPS

网站推荐给'rename to "exiftool.exe" for command-line use'。 https://exiftool.org。即使在 unix 中,如果不转义括号也是行不通的。

还有使用呼叫接线员的选项。使用制表符完成实际上是这样做的:

& '.\exiftool(-k).exe' test.jpg | select-string gps
  • 您无法直接从 Start-Process 调用 [1] 接收输出,因此 管道中使用它毫无意义

    • 事实上,在 Windows 上,您使用 Start-Process 启动的程序以 不同的 、新的 window 运行,这就是您看到的地方未过滤的输出(假定没有 Select-String 被应用 那里 );在你的调用 window 中,Start-Process 产生了 没有输出 ,因此没有任何东西被发送到 Select-String,整个流水线没有输出。
  • 切勿使用 Start-Process 同步 调用 控制台应用程序 其输出要 捕获或重定向 - 只需直接调用应用程序:

& "C:\PowerShell\exiftool(-k).exe" test.jpg | Select-String GPS -SimpleMatch

请注意,此调用需要 &call operator,因为您的可执行文件路径是 (double-)quoted(这里是必需的, 因为文件名包含 ()); & 只需要引用 and/or 的可执行路径包含变量引用;例如,您不需要它来调用 git ...


[1] 如果您将 -NoNewWindow -Wait 添加到 Start-Process调用,你仍然无法捕获传递重定向它.