(1/2)FileSystemObjectはファイル操作のための基本オブジェクトだ。WSHでファイルやフォルダをコピーしたり、移動、削除する方法について解説する。前回までは、WSHのオブジェクト(WScriptオブジェクト、WshShellオブジェクト、WshNetworkオブジェクト)について解説してきた。5.6のパッケージに含まれている)。5.6ライブラリに含まれるオブジェクトである。5.6には、スクリプト・ホスト実行ファイルwscript.exe、cscript.exeのほか、WScriptオブジェクト、WshShellオブジェクト、WshNetworkオブジェクト、本連載では取り上げなかったがWshController/WshRemoteオブジェクトが含まれている。第1回ではFileSystemObjectオブジェクトを便宜上、WSH内部オブジェクトとして紹介したが、厳密にいうと、「WSHの含まれるパッケージに含まれるオブジェクト」である。6.0などでも用いられている。WSHを使ってファイル操作を行うにはFileSystemObjectオブジェクトは必須であり、WSHがインストールされている環境には必ず含まれているので、ほぼWSHのセットとして考えて差し支えない。FileSystemObjectはProgIDが“Scripting.FileSystemObject”であり、文字どおりファイル・システムにアクセスするためのオブジェクトである。このオブジェクトを使うことでファイルやフォルダの移動/コピー/削除や、ファイルの拡張子名や親フォルダ・パスの取得などが行える。ドライブ、フォルダ、ファイルをオブジェクトとして取得するメソッドがあり、それぞれDriveオブジェクト、Folderオブジェクト、Fileオブジェクトに対応する。プロパティを持ち、取得/設定が可能である。Drive、Folder、FileオブジェクトのコレクションであるDrivesコレクション、Foldersコレクション、Filesコレクションというのも存在し、それぞれ対応するオブジェクトを要素として持つ。これらのコレクションは主に親オブジェクトのメソッドやプロパティから取得可能である。(例えばFilesコレクションなら当該フォルダのFolderオブジェクトのFilesプロパティから取得可能であり、当該フォルダに含まれるすべてのファイルの集合のインスタンスに対応している)。テキスト・ファイルをテキスト・ストリーム(TextStream)オブジェクトとして取得し、文字列を読み書き可能なメソッドも存在する。今回はこのうち、FileSystemObjectオブジェクト直下のメンバを取り上げ、解説していく。次回以降にFileオブジェクトやTextStreamオブジェクトなど、FileSystemObjectオブジェクトから生成可能なインスタンス、およびDictionaryオブジェクトについて解説する予定である。FileSystemObjectオブジェクトのメンバFileSystemObjectオブジェクトのメンバは以下の4つに大別できる。TextStreamオブジェクトを返すFileSystemObjectオブジェクトのメンバ今回はこのうち、1.と2.のメンバについて取り上げる。ファイルなどの情報を取得するファイルなどの情報を取得するには、主に「Get〜」で始まるメソッドを用いて取得する。Nothingこれは、コマンド・プロンプトの実行ファイルcmd.exeのファイル情報を得るスクリプトである。このスクリプトを実行すると、例えば次のように表示される。GetFileInfo.vbsの実行例FileSystemObjectオブジェクト直下のメソッドで取得できる情報には、このようなものがある。注意すべきなのは、これらのメソッドはすべて、ファイルが実際に存在してもしなくても実行可能である点だ。これらのメソッドはただ単に引数に渡された文字列を解析して、ドライブ名や拡張子などを返すだけである。objFSO.BuildPath("C:\kyonko",objFSO.GetTempName())としてもらいたい。GetTempNameメソッドは拡張子が「〜.tmp」になるランダムなファイル名を文字列として返すメソッドである。BuildPathメソッドは、引数に与えられた2つのパスに対し、適切なパス区切り文字“\”を補うか、あるいは(余分なら)削除して連結し、正しいパスにするメソッドである(*)。objFSO.GetTempName()を使った場合の実行例ファイル自体が存在しなくても、Get系のメソッドでファイル情報が取得できる。このように、ファイル自体が存在しなくても、パスの形式を取った文字列ならば、ドライブ名や親フォルダ名などが返される。ファイルだけではなく、フォルダの場合も同様に取得可能である。"ファイル.txt"のようにすれば“C:\新しいフォルダ\ファイル.txt”が得られると思うだろう。フォルダ名として“C:\新しいフォルダ”、ファイル名として“ファイル.txt”が与えられている場合は適切に“\”を加えないといけないし、フォルダ名として“C:\新しいフォルダ\”、ファイル名として“\ファイル.txt”が与えられている場合は“\”を削るコードを書かなければならない。実際にファイル操作を行う際は往々にしてこのようなケースが起こるので、それらを適切に処理してくれるBuildPathメソッドは有用である。ファイルが存在しない場合はファイル情報を取得しない、といったコードを書きたければ、先ほどのサンプル・ファイルGetFileInfo.vbsの、'ここにファイル存在確認のコードを入れてもよいという部分に、次のコードを入れるとよい。'FileExistsメソッドは引数のファイルが存在するとTrueを返す。"というファイルは存在しません。Ifこうすることで、引数のファイルが存在しない場合はスクリプトを終了させることができる。FileExistsメソッドは、引数に与えられたパスのファイルが存在する場合はTrueを、存在しない場合はFalseを返す。使うメソッドなので覚えておくとよいだろう。同じ種類のメソッドとして、ドライブの存在を確認するDriveExistsメソッド、フォルダの存在を確認するFolderExistsメソッドがある。ここで問題を1つ出そう。スクリプトが存在するフォルダにランダムな名前のファイルを作成することを想定し、そのフルパスを取得するところまでをコード化してもらいたい。マーカーで隠れたところを選択してチェックしてみよう。Nothingスクリプトの置かれている場所にあるファイルやフォルダを扱うことは多いので、この例は丸ごと覚えておくとよいだろう。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。