Compartilhar via


Tutorial: Definir a barra de progresso no Terminal do Windows

O Terminal do Windows é compatível com sequências da "Barra de Progresso" do ConEmu, também conhecidas como "OSC 9;4". Essas sequências permitem que um aplicativo de linha de comando exiba uma barra de progresso na janela do terminal. Isso é útil para comandos de execução longa, como copiar arquivos grandes ou implantar aplicativos.

No Terminal do Windows, a barra de progresso é exibida em dois locais:

  • No cabeçalho da guia, como um anel de progresso
  • Na barra de tarefas do Windows, da mesma maneira que uma barra de progresso de download.

Um exemplo de como é a aparência do anel de progresso no cabeçalho da guia

Pré-requisitos

  • Terminal do Windows v1.6 ou posterior.
  • Para a animação da barra de tarefas, você precisará garantir que "Mostrar animações no Windows" esteja habilitado em "Configurações/Facilidade de Acesso/Exibição".

Formato de sequência de barras de progresso

Para definir a barra de progresso, você precisa enviar a sequência do OSC 9;4 para o terminal. Essa sequência tem o seguinte formato:


ESC ] 9 ; 4 ; <state> ; <progress> BEL

  • ESC é o caractere de escape, ASCII 27.
  • BEL é o caractere de sino, ASCII 7.
  • <state> é um dos 0, 1, 2, 3 ou 4.
    • 0 é o estado padrão e indica que a barra de progresso deve estar oculta. Use esse estado quando o comando for concluído, para limpar qualquer estado de progresso.
    • 1: defina o valor de progresso como <progress>, no estado "padrão".
    • 2: defina o valor de progresso como <progress>, no estado "Erro"
    • 3: defina a barra de tarefas como o estado "Indeterminado". Isso é útil para comandos que não têm um valor de progresso, mas ainda estão em execução. Esse estado ignora o valor <progress>.
    • 4: defina o valor de progresso como <progress>, no estado "Aviso"
  • <progress> é um número entre 0 e 100, inclusivo.

Exemplos

PowerShell

# Set the progress bar to 50%
Write-Host -NoNewline ([char]27 + "]9;4;1;50" + [char]7)

Ou, como alternativa, no 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");

Prompt de comando

O Prompt de Comando é um pouco mais complicado, pois ele não tem um ótimo suporte para sequências de escape. Você pode usar o comando echo para enviar a sequência de escape, mas precisará usar caracteres ESC e BEL literais no arquivo. Elas podem ser renderizados como caixas no navegador da Web, mas devem funcionar no terminal.

<NUL set /p =]9;4;1;50 
echo Started progress (normal, 50)

O exemplo acima usa o dispositivo NUL para gravar a sequência de escape no console sem uma nova linha.

Nota: não encontrou seu shell favorito aqui? Se você descobrir, sinta-se à vontade para contribuir com uma solução para o seu shell preferido.