2015-06-10

PowerShellでプログレスバーを表示する

今回は「プログレスバー(英:ProgressBar)」について書いていきます。

プログレスバーと言われると馴染みがないかもしれません。

プログレスバーとは「進捗状況をグラフィカルに表示するもの」です。
よく見かけるのはコピーの時に出てくるこんなやつです!



これなら見たことがあるのではないでしょうか。


私は業務上、多くのtifファイル・PDFファイルを扱うことがあり、コピーや移動が頻繁に発生しています。
その作業をPowerShellでスクリプトファイルを作成し、簡素化しているのですが、容量が大きい場合などは時間がかかります。
そのとき、どの程度まで進んでいるのかを表示させたくなり、プログレスバーを導入しました。

プログレスバーを表示させるにはWrite-Progressコマンドレットを使用します。

それではプログレスバーを使った例文を記述します。



---------ここから-------------------------------------------------------------------------------------
# プログレスバー サンプル

For($b = 1 ; $b -le 10000 ; $b++)
{
$c = $b / 100
write-progress -Activity "数値を加算しています" -Status "しばらくお待ちください" -PercentComplete $c -CurrentOperation "$c % 完了"
}
---------ここまで-------------------------------------------------------------------------------------

上記内容をコピーし、PowerShell ISEに貼り付けて、実行してみてください。


この画像のように、画面中ほどに、プログレスバーが表示されると思います。
また、貼り付けたものを「名前をつけて保存」し、お好きな名前をつけて、任意の場所に保存してください。(例として「プログレスバー.ps1として保存しました)


次に保存したスクリプトファイル(プログレスバー.ps1) を右クリックし、「PowerShellで実行」をクリックしてください。

するとこのような画面が表示されると思います。
(100%までいくとこの画面は消えます。途中で×を押しても大丈夫です)


このように同じ内容のものを実行しても、PowerShell ISE上で実行した場合と、右クリックから実行した場合では表示方法が異なります。(これは仕様なので、変更することは残念ながらできないようです)


それでは、ここから例文を解説していきます。

例文では繰り返し文の代表ともいえるFor文を使用し、変数bに1を足していき、10000になるまで繰り返すというものです。

For文の中の文を見ていきます。

$c = $b / 100

この文は、パーセンテージを表示させる為に、その時点の変数bの値を100で割った値を変数cに格納しています。

例えば、ある時点で変数bの値が50だったとすると、50 / 100 = 0.5となり、「0.5%完了」と表示されます。


write-progress -Activity "数値を加算しています" -Status "しばらくお待ちください" -PercentComplete $c -CurrentOperation "$c % 完了"

この文がプログレスバーを表示する為の文となります。
それぞれのパラメーターは次の役割があります。

-Activity ・・・ 任意の文字列(1行目)
-Status  ・・・  任意の文字列(2行目)
-PercentComplete ・・・ 現在の進捗を表します。
                省略可能ですが、ない場合は進捗バーが進みません。

-CurrentOperationは、本来は"現在処理中のファイル名を表示する"等の使い方をするのですが、今回の例では、進捗率を表示するようにしています。
この部分で上の「$c = $b / 100」が生きてきます。

他にもパラメータは存在するようですが、勉強不足のため使えていません。

プログレスバーはFor文やForeach文などの繰り返し処理の際に使用します。
ただ見た目の問題なので、なくても結果は同じなのですが、進捗状況が目に見えてわかるようになるのはそれなりのメリットがあるのかもしれません。

次回から「Excelの操作」について、10回程度に分けて投稿していく予定です。

=======================================================================
本投稿に関する疑問や質問には可能な限りお答えさせていただきます。
お気軽にコメントやメールをお送りください。
(リクエストも歓迎します)
メール:tkk-powershell@gmail.com
また、間違いのご指摘・アドバイス等も歓迎いたします。
=======================================================================
Google+、Twitterで更新情報をお届けしています!
ぜひフォローをお願い致します!           
=======================================================================
スポンサーリンク


0 件のコメント:

コメントを投稿

疑問・質問・リクエスト お気軽にどうぞ (^O^)/