“-split”-在“-stream”的输出中?

"-split"-ing the output from "-stream"?

我有一段 PS 代码,它获取 7-Zip 提取输出并对其进行过滤,因此只打印百分比“%”的进度更新行。

控制台打印的一些行在百分比计数后也有其他内容(比如当前正在提取的文件)。

这些总是在 . 之后(space,句点,另一个 space)。有没有办法减少打印的字符串以删除 . 之后的任何内容?我似乎无法使用 -split,因为它必须位于管道的开头!

代码:

"Starting decompression of [$filePath]..."
& ZipPath "x" $filePath "-o$extractionPath" "-aos" "-bsp1" | out-string -stream | select-string %

示例输出:

  0%
  1%
  4%
  7%
 11%
 14%
 17%
 20%
 22%
 25%
 29%
 34%
 39%
 44%
 46%
 48%
 50%
 52%
 54%
 56%
 58%
 60%
 61%
 63%
 65%
 67%
 69%
 71%
 73%
 75%
 77%
 78% . 4x4 Evo (USA).bin
 79% . 4x4 Evo (USA).bin
 81% . 4x4 Evo (USA).bin
 82% . 4x4 Evo (USA).bin
 83% . 4x4 Evo (USA).bin
 84% . 4x4 Evo (USA).bin
 86% . 4x4 Evo (USA).bin
 87% . 4x4 Evo (USA).bin
 88% . 4x4 Evo (USA).bin
 89% . 4x4 Evo (USA).bin
 91% . 4x4 Evo (USA).bin
 92% . 4x4 Evo (USA).bin
 93% . 4x4 Evo (USA).bin
 94% . 4x4 Evo (USA).bin
 95% . 4x4 Evo (USA).bin
 97% . 4x4 Evo (USA).bin
 98% . 4x4 Evo (USA).bin
 99% . 4x4 Evo (USA).bin
100% . 4x4 Evo (USA).bin

我不喜欢那种需要大量管道的解决方案。 也许你应该考虑使用 Expand-Archive

但是这条线可以工作:

"100% . 4x4 Evo (USA).bin" | Select-String -Pattern "\d{1,3}%" -AllMatches | ForEach-Object { $_.Matches.Value }