Windows 终端支持 ConEmu“进度栏”序列(也称为“OSC 9;4”)。 这些序列允许命令行应用程序在终端窗口中显示进度栏。 这对于长时间运行的命令(例如复制大文件或部署应用程序的命令)非常有用。
在 Windows 终端中,进度栏显示在两个位置:
- 在选项卡标题中,作为进度环
- 在 Windows 任务栏中,以与下载进度栏相同的方式显示。
先决条件
- Windows 终端 v1.6 或更高版本。
- 对于任务栏动画,需要确保在“设置/轻松访问/显示”中启用“在 Windows 中显示动画”。
进度栏序列格式
若要设置进度栏,需要将 OSC 9;4 序列发送到终端。 该序列采用以下格式:
ESC ] 9 ; 4 ; <state> ; <progress> BEL
ESC
是转义字符 ASCII 27。BEL
是响铃字符 ASCII 7。<state>
是0
、1
、2
、3
、4
中的一个。0
是默认状态,表示应隐藏进度栏。 在命令完成后使用此状态来清除任何进度状态。1
:将进度值设置为<progress>
,处于“默认”状态。2
:将进度值设置为<progress>
,处于“错误”状态。3
:将任务栏设置为“不确定”状态。 这对于没有进度值但仍在运行的命令非常有用。 此状态忽略<progress>
值。4
:将进度值设置为<progress>
,处于“警告”状态。
<progress>
是 0 到 100 之间的数字(含 0 和 100)。
示例
PowerShell
# Set the progress bar to 50%
Write-Host -NoNewline ([char]27 + "]9;4;1;50" + [char]7)
也可使用 PowerShell 7:
# Set the progress bar to 50%
Write-Host -NoNewline ("`e]9;4;1;50`a")
Bash
# Set the progress bar to 50%
echo -ne "\033]9;4;1;50\a"
C#
// Set the progress bar to 50%
Console.Write("\x1b]9;4;1;50\x07");
命令提示符
命令提示符有点棘手,因为它对转义序列没有很好的支持。 可以使用 echo
命令发送转义序列,但需要在文件中使用原义 ESC 和 BEL 字符。 这些项可能在 Web 浏览器中呈现为框,但它们应该在终端中工作。
<NUL set /p =]9;4;1;50
echo Started progress (normal, 50)
上面的示例使用 NUL
设备将转义序列写入控制台,不带换行符。
注意:没有在这里看到你喜欢的 shell? 如果你已清楚,可随意为你喜欢的 shell 提供一个解决方案!