在PowerShell控制台中捕获并打印7-Zip的提取进度
我有一个PowerShell脚本,除其他外,它使用7-Zip提取文件在PowerShell控制台中捕获并打印7-Zip的提取进度,powershell,console,7zip,Powershell,Console,7zip,我有一个PowerShell脚本,除其他外,它使用7-Zip提取文件 "Starting decompression of [$filePath]..." & $7ZipPath "x" $filePath "-o$extractionPath" "-aos" | Out-Host 我一直在将主机切换到空主机,因为它看起来有点凌乱——我知道如果我添加-bsp1,我可以得到提取进度——但它每次引入7z,并将每个更新的百分比放在单独的行上,看起来有点凌乱 我的问题是:是否有任何方法可以捕获
"Starting decompression of [$filePath]..."
& $7ZipPath "x" $filePath "-o$extractionPath" "-aos" | Out-Host
我一直在将主机切换到空主机,因为它看起来有点凌乱——我知道如果我添加-bsp1
,我可以得到提取进度——但它每次引入7z,并将每个更新的百分比放在单独的行上,看起来有点凌乱
我的问题是:是否有任何方法可以捕获
-bps1
的进度百分比,并在控制台中以更紧凑的方式打印它-要么是一个进度条,要么只是一行带有更新百分比的文本?我这样管理我想要的:
"Extracting [$filePath]..."
& $7ZipPath "x" $filePath "-o$extractionPath" "-aos" "-bsp1" | out-string -stream | Select-String -Pattern "\d{1,3}%" -AllMatches | ForEach-Object { $_.Matches.Value } | foreach {
[System.Console]::SetCursorPosition(0, [System.Console]::CursorTop)
Write-Host "Progress:" $_ -NoNewLine
}
Out-Host
->Write-Host-NoNewline
?如果它是一个普通的zip文件,另一种方法是显示一个进度条。前提是OP运行的是PowerShell v5或更高版本,也就是说。我猜Expand Archive对.7z
文件不起作用。7z是7-zip自己的专有格式。是的,它可以工作,但是,如果该归档文件中已经有文件和文件夹(之前已解压缩),计数器将永远不会达到100%,因此您也必须解决这个问题。