5. 共通モジュールによるファイル操作の自動化
同梱されているファイルにて、ファイル名の末尾に"how_to"が付加されているファイルは、共通モジュールのかんたんな使用方法を例とした、サンプルスクリプトです。共通モジュールの使い方については、それらのファイルを参考にするとよいでしょう。
冒頭でも述べましたが、FileCommon.vbsをみていただくと、随所にファイル操作を行うためのFileSystemObjectを利用しているのがわかります。また、サンプルスクリプトで共通モジュールをインポートする際にもFileSystemObjectを利用しています。
FileSystemObjectは、前述のとおり、基本的なファイル操作も含め、ドライブやフォルダの操作も行うことができます。例えば、ファイルやフォルダの移動やコピー、ファイルの作成日時や最終更新日時の取得などのファイルシステムに関する操作は、FileSystemObjectを利用することで実装します。
著者の偏見ですが、VBScriptはプログラマーよりもシステム管理者に広く普及していると思われますので、システム管理者はシステム管理の一環としてファイル操作の多くをVBScriptで自動化している場合も多いかと思います。そういった場合に、今回紹介させていただいた共通モジュールはとても有用ではないでしょうか。
さて、今回ご紹介させていただいたFileCommonを利用して、実際にサンプルスクリプトを作成してみましょう。FileCommonを利用することで、以下のような処理をかんたんに行うことができるようになります。
- 深い階層のフォルダを作成し、所定のファイルをそこにコピーする
- 指定したフォルダにあるすべてのExcelファイルをテキストファイルに書き出す
- 指定したフォルダにて、1年以上更新されていないファイルを削除
試しに、(1)を上記共通モジュールを利用して実装してみましょう。
次のスクリプトは、"C:\TEMP\"フォルダにある"test.txt"ファイルを"C:\TEMP2\SAMPLE\20160303\"フォルダにコピーします。その際、"C:\TEMP2\"フォルダは作成されていないものとします。
Option Explicit
'--------------------------------------------------------------------------------
'<<< 共通モジュール インポート >>>
Dim objFso
Set objFso = CreateObject("Scripting.FileSystemObject")
Function Include(ByVal strFileName)
Include = objFso.OpenTextFile(strFileName, 1, False).ReadAll()
End Function
Execute Include("FileCommon.vbs")
Set objFso = Nothing
'--------------------------------------------------------------------------------
'コピー元のファイルが存在するフォルダを指定します。
Const SOURCE_FOLDER = "C:\TEMP\"
'コピー先となる深い階層のフォルダを指定します。
Const DESTINATION_FOLDER = "C:\TEMP2\SAMPLE\20160303\"
'コピーするファイル名を指定します。
Const SOURCE_FILE = "test.txt"
'ファイル操作を行う共通モジュールをインスタンス化します。
Dim fc
Set fc = New FileCommon
'共有モジュール内のCreateFolderEx()関数を実行し、上記フォルダを作成します。
fc.CreateFolderEx DESTINATION_FOLDER
'共有モジュールのFileCopyを呼び出します。
fc.FileCopy SOURCE_FOLDER & SOURCE_FILE, DESTINATION_FOLDER & SOURCE_FILE
'完了メッセージを表示します。
MsgBox "完了しました。", vbInformation + vbOkOnly
このスクリプトを実行すると、"C:\TEMP\"フォルダの"test.txt"ファイルが、正しく"C:\TEMP2\SAMPLE\20160303\"フォルダにコピーされたのを確認することができます。
FileCommon共通モジュールの一部の処理は、クラスで定義されており、インスタンス化することで使用可能となります。
深い階層のフォルダを作成するメソッドは、CreateFolderEx()メソッドです。このメソッドを実行すると、指定したフォルダの最下層までを経由するまでの途中のフォルダが存在しない場合でも、まとめてフォルダを作成することが可能です。
また、ファイルをコピーするメソッドは、CopyFile()メソッドです。このメソッドを実行すると、第1パラメータに指定したファイルのパスに該当するファイルを、第2パラメータに指定したファイルのパスにコピーします。
6. まとめ
「まだまだ使える! WSH」は、5回目となる今回で最終回となります。社内システムの管理や運用、または開発まで一気に担うシステム管理者の業務効率を少しでも改善するために開発したスクリプトとして紹介させていただきましたが、いかがでしたでしょうか。今回の連載で紹介させていただいた共通モジュールが、システム管理の一躍を担ってくれれば、著者にとってこれ以上の喜びはありません。
また、著者のホームページでは、WSH以外にもさまざまな業務に役立つアプリを公開しています。本職のプログラマーのためだけでなく、WSHやExcelVBAのように初心者でもプログラミングにとっつきやすいプログラミング言語が大半です。
下記のようなアプリをダウンロードすることができます。
- 複数のExcelファイルのすべてのシートを一気にCSVファイルに変換するアプリ
- 社内のパソコン管理台帳をボタン1つで作成するアプリ
- 画像ファイルの大きさをまとめて変換するアプリ
その多くはソースコードも含めた形で無料公開しています。ぜひとも、一度ご訪問ください。
7. 参考資料
- 『Windows自動処理のためのWSHプログラミングガイド』(著者:五十嵐貴之、発売日:2009年6月、発売元:ソシム)
- フリープログラミング団体 いかちソフトウェア
