第10回 WSHスクリプトからのファイル操作(1):Windows管理者のためのWindows Script Host入門(3/3 ページ)
WSHには、標準ではファイル操作用のオブジェクトはない。しかし汎用のFSOオブジェクトを利用すれば、これが可能になる。
これまではFSOオブジェクトが提供する各メソッドを利用したファイル操作について説明してきた。これに加えFSOでは、オブジェクトとしてファイルを表すFileオブジェクトが用意されている。Fileオブジェクトを利用することで、ファイルのコピーや移動、削除などができるほか、ファイルが持つさまざまな属性を取得、設定することもできる。ここからは、Fileオブジェクトを利用したファイル操作方法について解説しよう。
Fileオブジェクトは、FSOオブジェクトのGetFileメソッドや、後述するFolderオブジェクトのFilesプロパティから取得する。例えば、「D:\WSH\test.txt」を表すFileオブジェクトを取得するには次のようにする。なお、指定したファイルが存在しなければGetFileメソッドはエラーとなる。
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("D:\WSH\test.txt ")
Fileオブジェクトには、以下のメソッド・プロパティがある。
メソッド/プロパティ | 機能 |
---|---|
OpenAsTextStreamメソッド | ファイルを開き、TextStreamオブジェクトを返す |
Copyメソッド | ファイルをコピーする |
Moveメソッド | ファイルを移動する |
Deleteメソッド | ファイルを削除する |
Attributesプロパティ | 属性を取得、設定する |
DateCreatedプロパティ | 作成日時を取得する |
DateLastAccessedプロパティ | 最終アクセス日時を取得する |
DateLastModifiedプロパティ | 最終更新日時を取得する |
Driveプロパティ | ファイルの格納されているドライブを表すDriveオブジェクトを取得する |
Nameプロパティ | ファイルの名前を取得、設定する |
ParentFolderプロパティ | 親フォルダを表すFolderオブジェクトを取得する |
Pathプロパティ | ファイルのパスを取得する |
ShortNameプロパティ | MS-DOS形式のファイル名を取得する |
ShortPathプロパティ | MS-DOS形式のパスを取得する |
Sizeプロパティ | ファイルのサイズを取得する |
Typeプロパティ | ファイルの種類を取得する |
ファイルを開く
OpenAsTextStreamメソッドは、OpenTextFileメソッドと同じようにファイルを開きTextStreamオブジェクトを返すメソッドである。Fileオブジェクトで表されているファイルを開くため、パラメータでのファイル指定はない。また、Fileオブジェクトで表されるファイルは存在することが分かっているので、ファイルが存在しなかった場合にファイルを作成する機能はない。従って、パラメータでは読み込みモードか書き込みモードかの指定と、文字コードの指定のみを行う。これらのパラメータで指定する値はOpenTextFileメソッドと同じである。
Set objStream = objFile.OpenAsTextStream([iomode] [, format])
ファイルのコピー、移動、削除
Copy、Move、Deleteの各メソッドは、それぞれファイルのコピー、移動、削除を行うメソッドである。これらもFSOオブジェクトのCopyFile、MoveFile、DeleteFileと同じ機能を持つが、対象ファイルはFileオブジェクトで表されるファイルであり、パラメータでは対象ファイルを指定しない。そのため、FileオブジェクトのCopy、Move、Deleteメソッドには、ワイルドカードを指定して複数のファイルを処理する機能はない。
objFile.Copy destination [, overwrite]
objFile.Move destination
objFile.Delete [force]
ファイル属性の取得と設定
Attributesプロパティを利用すれば、ファイルの属性を取得、設定できる。ただしこのプロパティで扱う属性は、「読み取り専用」や「隠しファイル」など、オン/オフのみで表される情報であり、ファイル・サイズや日付などの情報は含まれない。各属性には対応する数値が決められており、Attributesプロパティは有効となっているすべての属性の値を合計した数値を返す。数値から分かるとおり、各属性には特定のビット値が対応している。以下の表が属性の一覧である。
属性の名前 | 数値 | 可能な操作 | 内容 |
---|---|---|---|
ReadOnly | 1 | 取得/設定 | 読み取り専用ファイル |
Hidden | 2 | 取得/設定 | 隠しファイル |
System | 4 | 取得/設定 | システム・ファイル |
Volume | 8 | 取得のみ | ディスクドライブ・ボリューム・ラベル |
Directory | 16 | 取得のみ | フォルダ/ディレクトリ |
Archive | 32 | 取得/設定 | 前回のバックアップ以降に変更されていれば1 |
Alias | 64 | 取得のみ | リンク/ショートカット |
Compressed | 128 | 取得のみ | 圧縮ファイル |
例えば読み取り専用の隠しファイルであれば、Attributesプロパティは1+2=3となる。属性値の意味はファイルとフォルダで同一であり、この一覧にはディレクトリであることを示す値なども含まれている。
VBScriptで特定の属性がオンかオフかを調べたり、更新したりする場合には、And演算子やOr演算子を用いるのが便利である。数値に対してAndやOrなどの論理演算子を用いると、ビットごとにAnd演算/Or演算が適用される。次の例ではtest.txtファイルのSystem属性を調べ、Hidden属性をオンにし、ReadOnly属性をオフにする。
1: Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
2: Set objFile = objFSO.GetFile("test.txt ")
3: WScript.Echo "属性=" & objFile.Attributes
4: ' System属性(値4)を調べる
5: If (objFile.Attributes And 4) > 0 Then
6: WScript.Echo "System属性はオンです。"
7: Else
8: WScript.Echo "System属性はオフです。"
9: End If
10: ' Hidden属性(値2)をオンにする
11: objFile.Attributes = (objFile.Attributes Or 2)
12: ' ReadOnly属性(値1)をオフにする
13: objFile.Attributes = (objFile.Attributes And (255 - 1))
14: WScript.Echo "属性=" & objFile.Attributes
5行目では、And演算によって調査したいビット値の内容を検査している(ビット値が1か、0かを検査している)。11行目では、オンにしたい値とのOr演算により、Hidden属性をオンにした値を計算している。もともとHidden属性がオンであれば値は変化しない。
13行目では、すべての属性がオンである255という値から、オフにしたい1という値を引くことで、ReadOnlyのみが0という値(マスク)を計算し、AttributesとのAnd演算によりReadOnlyビットをオフにしている。もともとReadOnly属性がオフであれば値は変化しない。実行結果は以下のようになる。この例では、もともとのtest.txtの属性はArchive属性のみオンであった。
D:\WSH>cscript attributes.vbs
属性=32
System属性はオフです。
属性=34
D:\WSH>
ファイルの情報の取得
ファイルの日付や名前、サイズなどの情報は、それぞれFileオブジェクトのプロパティとして用意されている。Nameプロパティ以外は、情報の取得のみが可能だ。次のコードは、test.txtの情報を表示する例である。DriveメソッドとParentFolderメソッドは、後述するDriveオブジェクトとFolderオブジェクトを返すので、ここではそれぞれの持つPathプロパティを表示している。
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("longfilename.txt ")
WScript.Echo "DateCreated : " & objFile.DateCreated
WScript.Echo "DateLastAccessed : " & objFile.DateLastAccessed
WScript.Echo "DateLastModified : " & objFile.DateLastModified
WScript.Echo "Drive : " & objFile.Drive.Path
WScript.Echo "Name : " & objFile.Name
WScript.Echo "ParentFolder : " & objFile.ParentFolder.Path
WScript.Echo "Path : " & objFile.Path
WScript.Echo "ShortName : " & objFile.ShortName
WScript.Echo "ShortPath : " & objFile.ShortPath
WScript.Echo "Size : " & objFile.Size
WScript.Echo "Type : " & objFile.Type
実行すると次のようにファイルの情報が表示される。
D:\WSH>cscript file.vbs
DateCreated : 2005/09/22 22:19:28
DateLastAccessed : 2005/09/22 22:45:49
DateLastModified : 2005/09/22 22:45:49
Drive : D:
Name : longfilename.txt
ParentFolder : D:\WSH
Path : D:\WSH\longfilename.txt
ShortName : LONGFI~1.txt
ShortPath : D:\WSH\LONGFI~1.txt
Size : 18
Type : テキスト ドキュメント
D:\WSH>
Copyright© Digital Advantage Corp. All Rights Reserved.