次の方法で共有


チュートリアル: Windows ターミナルで進行状況バーを設定する

Windows ターミナルでは、ConEmu "進行状況バー" シーケンス ("OSC 9;4" とも呼ばれます) がサポートされています。 これらのシーケンスを使用すると、コマンド ライン アプリケーションでターミナル ウィンドウに進行状況バーを表示できます。 これは、大規模なファイルのコピーやアプリケーションのデプロイなど、実行時間の長いコマンドに役立ちます。

Windows ターミナルでは、進行状況バーは以下の 2 つの場所に表示されます。

  • タブ ヘッダーに、進行状況リングとして
  • Windows タスク バーに、ダウンロードの進行状況バーと同じ方法で。

タブ ヘッダーの進行状況リングがどのように表示されるかの例

前提条件

  • Windows ターミナル v1.6 以降。
  • タスク バー アニメーションのためには、"設定 / 簡単操作 / 表示" で "Windows でアニメーションを表示する" が有効になっていることを確認する必要があります。

進行状況バー シーケンスの形式

進行状況バーを設定するには、OSC 9;4 シーケンスをターミナルに送信する必要があります。 このシーケンスは、以下の形式になっています。


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

  • ESC はエスケープ文字である ASCII 27 です。
  • BEL は警告文字である ASCII 7 です。
  • <state>01234 のいずれかです。
    • 0 は既定の状態であり、進行状況バーを非表示にする必要があることを示します。 コマンドが完了したらこの状態を使用して進行状況の状態をクリアします。
    • 1: 進行状況の値を <progress> に、"既定" 状態で設定します。
    • 2: 進行状況の値を <progress> に、"エラー" 状態で設定します
    • 3: タスク バーを "不確定" 状態に設定します。 これは、進行状況の値を持たないが、まだ実行中のコマンドに役立ちます。 この状態では、<progress> 値は無視されます。
    • 4: 進行状況の値を <progress> に、"警告" 状態で設定します
  • <progress> は 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");

Command Prompt

コマンド プロンプトにはエスケープ シーケンスに対する優れたサポートがないので、少し複雑になります。 echo コマンドを使用してエスケープ シーケンスを送信できますが、ファイル内でリテラルの ESC 文字と BEL 文字を使用する必要があります。 これらは Web ブラウザーでボックスとしてレンダリングされる場合がありますが、ターミナルでは動作するはずです。

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

上の例では、NUL デバイスを使用して、エスケープ シーケンスを改行なしでコンソールに書き込みます。

: お気に入りのシェルがここに表示されていない場合 これが判明した場合は、お気に入りのシェルの解決策をご自由にお寄せください。