【bat】処理の進捗を簡易的に表示する方法(プログレスバー風)

バッチファイルでは標準でプログレスバーを表示する機能はありません。しかし工夫次第で「簡易的な進捗表示」を実装することができます。
ロングランの処理を走らせるときにユーザーに進捗が見えると安心感があり、デバッグ時にも役立ちます。
本記事では、バッチファイルでできるプログレスバー風の表示方法を紹介します。

スポンサーリンク

方法1:進捗バーを文字で描画する

setlocal enabledelayedexpansion を使って繰り返しごとに「#」を追加していき、進捗を可視化します。

@echo off
setlocal enabledelayedexpansion
set "BAR="

for /L %%i in (1,1,20) do (
  set "BAR=!BAR!#"
  cls
  echo 処理中... [!BAR!]
  timeout /t 1 >nul
)

echo 完了しました!
pause

上記では 20 ステップで「#」を積み上げてバーを描画します。
timeout の秒数を調整すれば進行速度を変えられます。

方法2:進捗率を数値で表示する

「%」表示をするだけでも進捗の目安になります。ループのカウンタを使って計算します。

@echo off
setlocal enabledelayedexpansion

set "MAX=100"
for /L %%i in (1,1,%MAX%) do (
  cls
  echo 処理中... %%i%%
  timeout /t 1 >nul
)

echo 完了しました!
pause

%%i%% が 1 から 100 まで進むので、シンプルな進捗率表示になります。

方法3:バーとパーセンテージを組み合わせる

見栄えを良くしたい場合は、バーの長さとパーセンテージを併用します。

@echo off
setlocal enabledelayedexpansion

set "MAX=50"
set "BARLEN=20"

for /L %%i in (1,1,%MAX%) do (
  set /a PERCENT=%%i*100/%MAX%
  set /a FILLED=%%i*%BARLEN%/%MAX%
  set "BAR="
  for /L %%j in (1,1,!FILLED!) do set "BAR=!BAR!#"
  cls
  echo 処理中... [!BAR!] !PERCENT!%%
  timeout /t 1 >nul
)

echo 完了しました!
pause

BARLEN でバーの最大長を決め、進行に応じて「#」が追加されます。パーセンテージ表示と組み合わせることで、より「プログレスバー風」に見せられます。

方法4:実処理と組み合わせる

実際のファイル処理やコピー処理と進捗バーを組み合わせることも可能です。例えば一定件数ごとに進捗を更新すれば、簡易的な進捗表示になります。

@echo off
setlocal enabledelayedexpansion

set COUNT=0
for %%F in (*.txt) do (
  set /a COUNT+=1
  echo 処理中: %%F
  rem 実際の処理をここに記述
  timeout /t 1 >nul
  cls
  echo 進捗: !COUNT! 件処理完了
)

echo 完了しました!
pause

よくある質問(FAQ)

Q. バッチファイルでプログレスバーを表示する一番シンプルな方法は何ですか?
A. echoコマンドと\r(キャリッジリターン)を組み合わせた方法が最もシンプルです。set /p =を使って改行なしで同じ行を上書き表示することで、プログレスバー風の表示が実現できます。
Q. 処理の進捗率(パーセンテージ)を計算するにはどうすればよいですか?
A. バッチファイルでは整数演算しか使えないため、set /a percent=processed*100/totalのように計算します。例えばFORループで処理した件数をカウントし、総件数で割ることでパーセンテージを求めます。
Q. プログレスバー表示中に他の処理の出力が混在しないようにするにはどうすればよいですか?
A. 2>nulでエラー出力を抑制するか、@echo offでコマンド自体の表示を止めます。また、進捗表示用の処理と実際の処理を明確に分離し、進捗更新時だけ画面に書き込む設計にすることが重要です。

まとめ

バッチファイルで本格的な GUI プログレスバーは難しいですが、文字や数値を工夫するだけで進捗表示を再現できます。
方法は大きく以下の4つです。

  • バーを文字で積み上げる
  • パーセンテージ表示にする
  • バーとパーセンテージを組み合わせる
  • 実際の処理と組み合わせて動的に表示する

長時間処理を行うバッチでは、これらを活用してユーザーに進捗を見せることで、実用性と利便性を向上させられます。