SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

まだまだ使える! WSH

まだまだ使える! WSHプログラミング ~ VBScriptでファイルを操作する共通モジュール

まだまだ使える! WSH 第5回

5. 共通モジュールによるファイル操作の自動化

 同梱されているファイルにて、ファイル名の末尾に"how_to"が付加されているファイルは、共通モジュールのかんたんな使用方法を例とした、サンプルスクリプトです。共通モジュールの使い方については、それらのファイルを参考にするとよいでしょう。

 冒頭でも述べましたが、FileCommon.vbsをみていただくと、随所にファイル操作を行うためのFileSystemObjectを利用しているのがわかります。また、サンプルスクリプトで共通モジュールをインポートする際にもFileSystemObjectを利用しています。

 FileSystemObjectは、前述のとおり、基本的なファイル操作も含め、ドライブやフォルダの操作も行うことができます。例えば、ファイルやフォルダの移動やコピー、ファイルの作成日時や最終更新日時の取得などのファイルシステムに関する操作は、FileSystemObjectを利用することで実装します。

 著者の偏見ですが、VBScriptはプログラマーよりもシステム管理者に広く普及していると思われますので、システム管理者はシステム管理の一環としてファイル操作の多くをVBScriptで自動化している場合も多いかと思います。そういった場合に、今回紹介させていただいた共通モジュールはとても有用ではないでしょうか。

 さて、今回ご紹介させていただいたFileCommonを利用して、実際にサンプルスクリプトを作成してみましょう。FileCommonを利用することで、以下のような処理をかんたんに行うことができるようになります。

  1. 深い階層のフォルダを作成し、所定のファイルをそこにコピーする
  2. 指定したフォルダにあるすべてのExcelファイルをテキストファイルに書き出す
  3. 指定したフォルダにて、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. 参考資料

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
まだまだ使える! WSH連載記事一覧

もっと読む

この記事の著者

五十嵐貴之(イカラシ タカユキ)

1975年2月生まれ。新潟県長岡市(旧越路町)出身。フリープログラミング団体いかちソフトウェア所属。 著書・これならわかるSQL入門の入門(翔泳社)・Windows自動処理のためのWSHプログラミングガイド(ソシム)・いちばんやさしいデータベースの本(技術評論社)・SQLiteポケットリフ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9365 2016/04/19 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー