【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

まとめ

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

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

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