第10回 WSHスクリプトからのファイル操作(1)Windows管理者のためのWindows Script Host入門(3/3 ページ)

» 2005年10月13日 00時00分 公開
前のページへ 1|2|3       

 これまではFSOオブジェクトが提供する各メソッドを利用したファイル操作について説明してきた。これに加えFSOでは、オブジェクトとしてファイルを表すFileオブジェクトが用意されている。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>


「運用 Windows管理者のためのWindows Script Host入門」のインデックス

運用 Windows管理者のためのWindows Script Host入門

前のページへ 1|2|3       

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。