Tech-Ezo (Hokkaido PC and Network Users Group)
 Top Page  |  What's Tech-Ezo  |  Next Seminar  |  Seminar Log  |  Seminar Plan  |  Tips  |  life  |  Link  |
Scr.003 ステップアップ WSH - 使えそうなスクリプトを作って見よう
前ページへ   [ステップアップ WSHへ戻る]  


■  Level.15(最終回)   フォルダ再帰探索の応用例
■ ■

 検索スクリプトについては前回で終了し、最終回となるLevel15では何かと使える再帰探索の応用例をご紹介します。

指定のフォルダ以下全てのファイル(フォルダ)数と総容量(サイズ)を表示する

 このレベルの趣旨としましては、フォルダを階層的に辿っていく再帰処理の骨子をなるべく簡単なロジックで示し、今後、似たようなスクリプトを作る上でのベースとなるような簡素なスクリプトを提供することです。

 かつ、ちょっと使えるスクリプトだったら、尚いいですよね(...自分で言っておいてなんですが、む、難しい)。

 そこで考えたのが、表題にあります「指定のフォルダ以下全てのファイル数と総容量を表示する」スクリプトです。

 しかーし。これってフォルダを右クリックしてプロパティを表示すると出てくるんですよねぇ。まぁ、(私は)気にしない、気にしない。。。(汗

いきなりおまけ

 題材が決まって、さぁスクリプト作成とばかりに、Level.14のスクリプトを修正して作ってしまったのですが、せっかくメインロジックが簡素になっても、HTAだけにユーザーインタフェース部分の記載が残ってしまって、今一つ全体がスッキリしない状態となってしまいました。

 そこで、これは不採用にしたんですが、そのままゴミ箱に捨ててしまうのももったいないので、おまけとして提供させて頂きたいと思います。

フォルダ情報表示スクリプト(HTA版) ダウンロード(level15a.lzh)

 使い方は見ていただければ分かると思いますが、level15.htaを起動(ダブルクリック)して、フォルダ名に調査したいフォルダを書いて、調査開始ボタンをクリック、これだけです。調査結果として、ファイル数、フォルダ数、ファイル総容量(バイト)が表示されます。

後から本題

 さて、再帰処理自体の説明についてはLevel.10で済ませてしまっていますから、ここでは、まず最初にスクリプトを提示して、後から簡単な説明をしたいと思います。

フォルダ情報表示スクリプト(コマンドライン版) * ダウンロード(level15.lzh)
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
' --< フォルダの再帰処理 >------------------------------------------------------
Sub FolderSearch(fn)
    ' 引数に指定されたフォルダの情報を取得
    Set subf = fso.GetFolder(fn)

    ' ファイル数と、サブフォルダ数の加算
    TotalCountFile = TotalCountFile + subf.Files.Count
    TotalCountFolder = TotalCountFolder + subf.Subfolders.Count

    ' 指定のフォルダに格納された各ファイルの処理
    For Each FileName In subf.Files
        TotalSize = TotalSize + FileName.Size
    Next

    ' 指定のフォルダに格納された各サブフォルダを処理する
    For Each FolderName In subf.Subfolders
        FolderSearch(FolderName)
    Next
End Sub

' --< メインルーチン >----------------------------------------------------------
' オブジェクト定義
Set arg = WScript.Arguments
Set fso = CreateObject("Scripting.FileSystemObject")

' カウンタクリア
TotalSize = 0
TotalCountFile = 0
TotalCountFolder = 0

' フォルダ探索開始
FolderSearch(arg(0))

' 結果表示
WScript.Echo "調査フォルダ:" & arg(0)
WScript.Echo "ファイル数:" & TotalCountFile
WScript.Echo "フォルダ数:" & TotalCountFolder
WScript.Echo "ファイル総容量:" & TotalSize

 前半の1〜20行目がフォルダ探索関数、後半の21〜38行目がメインロジックとなっており、後半のメインロジックの部分については、オブジェクトの定義、カウンタのクリア、フォルダ探索処理の呼び出し、結果表示と特にこのレベルでの説明は不要かと思います。

 前半部分についても、今までの検索処理をより簡素にした形となっているだけです。

  • 4行目で、フォルダ情報の取得。
  • 7行目、8行目で、指定のフォルダに格納されたファイル数、フォルダ数をカウンタに加算。
  • 11〜13行目が、指定のフォルダに格納されたファイル数だけ回るループで、ファイルのサイズをカウンタに加算。
  • 16〜18行目が、指定のフォルダに格納されたサブフォルダ数だけ回るループで、サブフォルダを引数に自分自身を呼びだしている。

 と、至って簡単ですね。

実行してみる

 では、コマンドラインから実行して見ましょう。

level15.vbsをコマンドラインから実行
C:\script>cscript level15.vbs c:\script\tips\
調査フォルダ:c:\script\tips\
ファイル数:16
フォルダ数:3
ファイル総容量:55560
C:\script>

 と、こんな感じになります。

 このレベルは再帰処理のベースとなるようなスクリプトを提示することが目的でしたので、処理はとてもシンプルです(3つのカウンタへの加算処理を3行書いているだけ)。よって、このスクリプトをベースに新たなスクリプトを作成する場合には、3行の加算処理を削除して、代わりに欲しい機能を記述して行けば良いのでしょう。



 さて、これでこのレベルも終了です。そして、今講習もこれで全て終了となります。

 冒頭でも述べましたが、これら一連の資料は、Tech-Ezo 2003 Round 23「おサルなWSH」と題した、北海道の勉強会で使った資料を元に、口答説明した部分を大幅に加筆したものです。

 この時に使用した3部構成の資料のうち、「Session.1 うんちくはほどほどにしてとりあえず動かして見よう」と、この「Session.2 使えそうなスクリプトを作って見よう」は、ステップアップWSHから、また良く使いそうなTips集として逆引きリファレンスを、逆引きWSHサンプル集として纏めました。微力ながら今後のスクリプトライフの一助になれば幸いです。

 最後に、この資料のベースとなったTech-Ezoの勉強会はテーマもさまざまで、かつ気軽に参加できるものです。いわゆる手弁当を持ち寄って行うような「手作り」の参加者本意の集まりですので、近くで開催される時には是非お寄り下さい。お待ちしております。



前ページへ   [ステップアップ WSHへ戻る]  
-
※全ては自己責任でお願いします。
※当サイトに関するご連絡は tomomo_c@hotmail.com までお願いします。
最終更新日 2004.11.2