検索
連載

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

FileSystemObjectを利用したWSHからのファイル操作法。今回はフォルダの操作とドライブの操作について解説する。

Share
Tweet
LINE
Hatena
前のページへ |       

ドライブ情報の取得

 次に、ドライブ情報の取得について解説する。FSOオブジェクトでは、ドライブを列挙したり、ドライブの空きスペースの大きさを取得したりすることができる。ただしFSOオブジェクトではドライブの情報を取得できるだけで、ドライブの設定を更新することはできない。ネットワーク・ドライブの接続や切断は、FSOオブジェクトではなく、第8回で解説したWshNetworkオブジェクトを利用する。FSOにはドライブを表すDriveオブジェクトがあり、ドライブの情報はDriveオブジェクトのプロパティとして取得する。


Driveオブジェクト
ドライブ情報を取得できる。ただしDriveオブジェクトでドライブの設定を変更することはできない。

 FSOオブジェクト自体の持つドライブ関係のメソッド/プロパティは以下の3種類である。

メソッド/プロパティ 機能
DriveExistsメソッド ドライブが存在するかどうかを調査する
GetDriveメソッド Driveオブジェクトを返す
Drivesプロパティ ドライブの一覧を返す

 DriveExistsメソッドは、パラメータとしてドライブ名を取り、ドライブが存在すればTrueを、存在しなければFalseを返す。GetDriveメソッドは、渡されたドライブ名に対応するDriveオブジェクトを返す。これら2つのメソッドには、ドライブ文字(C)のほか、コロンの付いたドライブ名(C:)、コロンと「\」記号の付いたドライブ名(C:\)、ネットワーク・ドライブのUNC名(\\Server\Share)なども渡すことができる。DrivesプロパティはFiles、SubFoldersなどと同様に、ドライブの一覧をコレクションとして返す。

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
WScript.Echo CStr(objFSO.DriveExists("A"))
WScript.Echo CStr(objFSO.DriveExists("B:"))
WScript.Echo CStr(objFSO.DriveExists("C:\"))
WScript.Echo CStr(objFSO.DriveExists("\\Server04\public"))

D:\WSH>cscript driveexists.vbs
True
False
True
True

D:\WSH>

Driveオブジェクト

 Driveオブジェクトはドライブを表すオブジェクトである。FSOオブジェクトのGetDriveメソッド、Drivesプロパティ、FileオブジェクトとFolderオブジェクトのDriveプロパティから取得できる。Driveオブジェクトには以下の12種類のプロパティがある。

プロパティ 機能
AvailableSpaceプロパティ 利用可能な空きスペースの大きさを取得する
DriveLetterプロパティ ドライブ名(「C」など)を取得する
DriveTypeプロパティ ドライブの種類を取得する
FileSystemプロパティ ドライブのファイルシステムを取得する
FreeSpaceプロパティ ディスクの空きスペースの大きさを取得する
IsReadyプロパティ ドライブが準備できているかどうかを取得する
Pathプロパティ コロン付きのドライブ名を取得する
RootFolderプロパティ ルートフォルダを表すFolderオブジェクトを取得する
SerialNumberプロパティ ディスクのシリアルナンバーを取得する
ShareNameプロパティ ネットワーク・ドライブの共有名を取得する
TotalSizeプロパティ ディスクの総容量を取得する
VolumeNameプロパティ ドライブのボリューム名を取得する

 AvailableSpaceプロパティとFreeSpaceプロパティは通常同じ値を返す。ディスクにクォータ制限がかかっている場合には、この2つの値は異なる値を返す。

 DriveTypeプロパティは、ドライブの種類によって0から5までの整数値を返す。0は不明なドライブ、1はリムーバブル・ディスク、2はハードディスク、3はネットワーク・ドライブ、4はCD-ROM、5はRAMディスクを表す。

 FileSystemプロパティは、「NTFS」「FAT」「CDFS」のどれかを返す。

 ShareNameプロパティは、ネットワーク・ドライブ以外のドライブでは空文字列("")を返す。

 次の例ではDドライブの情報を表示する。

 1: Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
 2: Set objDrive = objFSO.GetDrive("D")
 3: WScript.Echo "AvailableSpace : " & objDrive.AvailableSpace
 4: WScript.Echo "DriveLetter    : " & objDrive.DriveLetter
 5: WScript.Echo "DriveType      : " & objDrive.DriveType
 6: WScript.Echo "FileSystem     : " & objDrive.FileSystem
 7: WScript.Echo "FreeSpace      : " & objDrive.FreeSpace
 8: WScript.Echo "IsReady        : " & objDrive.IsReady
 9: WScript.Echo "Path           : " & objDrive.Path
10: WScript.Echo "RootFolder     : " & objDrive.RootFolder.Path
11: WScript.Echo "SerialNumber   : " & objDrive.SerialNumber
12: WScript.Echo "ShareName      : " & objDrive.ShareName
13: WScript.Echo "TotalSize      : " & objDrive.TotalSize
14: WScript.Echo "VolumeName     : " & objDrive.VolumeName

D:\WSH>cscript drive.vbs
AvailableSpace : 3479191552
DriveLetter    : D
DriveType      : 2
FileSystem     : NTFS
FreeSpace      : 3479191552
IsReady        : True
Path           : D:
RootFolder     : D:\
SerialNumber   : -1333760323
ShareName      :
TotalSize      : 4713082880
VolumeName     : ローカル ディスク

D:\WSH>

パス文字列の処理

 最後に、パス文字列を処理するためのメソッドを紹介する。ファイル名の取得や親フォルダなどは、FileオブジェクトやFolderオブジェクトを使っても取得できるが、文字列のまま処理することで、実際には存在しないパスも扱うことができるのが利点といえる。

 パス文字列を処理するメソッドには以下の7種類がある。

メソッド 機能
GetDriveNameメソッド パスのドライブ名を取得する
GetFileNameメソッド パスのファイル名を取得する
GetBaseNameメソッド パスの拡張子を除いた名前を取得する
GetExtensionNameメソッド パスの拡張子を取得する
GetParentFolderNameメソッド パスの親フォルダのパスを取得する
GetAbsolutePathNameメソッド 相対パスを絶対パスに変換する
BuildPathメソッド パスとファイル名を結合する

 GetDriveNameメソッド、GetFileNameメソッド、GetBaseNameメソッド、GetExtensionNameメソッド、GetParentFolderNameメソッドはパス文字列から一部分を抽出するメソッドである。例えば、「D:\WSH\test.txt」であれば次のようになる。

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strPath = "D:\WSH\test.txt"
WScript.Echo "GetDriveName        : " & objFSO.GetDriveName(strPath)
WScript.Echo "GetFileName         : " & objFSO.GetFileName(strPath)
WScript.Echo "GetBaseName         : " & objFSO.GetBaseName(strPath)
WScript.Echo "GetExtensionName    : " & objFSO.GetExtensionName(strPath)
WScript.Echo "GetParentFolderName : " & objFSO.GetParentFolderName(strPath)

D:\WSH>cscript path1.vbs
GetDriveName        : D:
GetFileName         : test.txt
GetBaseName         : test
GetExtensionName    : txt
GetParentFolderName : D:\WSH

D:\WSH>

 GetAbsolutePathNameメソッドは、カレント・ディレクトリに基づいて、相対パスを絶対パスに変換する。絶対パスを渡した場合も、そのまま絶対パスが返される。BuildPathはパラメータを2つ取り、2つの文字列を「\」記号で連結した文字列を返す。「\」記号の数はBuildPathメソッドによって調整されるが、絶対パス/相対パスなどは処理されない。

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
WScript.Echo objFSO.GetAbsolutePathName("Folder1")
WScript.Echo objFSO.GetAbsolutePathName("\Test1\Test2")
WScript.Echo objFSO.GetAbsolutePathName("C:\Test1\Test2")
WScript.Echo objFSO.GetAbsolutePathName("..\Test2")
WScript.StdOut.WriteLine
WScript.Echo objFSO.BuildPath("D:\Dummy", "File1")
WScript.Echo objFSO.BuildPath("Dummy", "File1")
WScript.Echo objFSO.BuildPath("D:\Dummy\", "\Test1\Test2")
WScript.Echo objFSO.BuildPath("D:\Dummy\", "..\Test2")

D:\WSH>cscript path.vbs
D:\WSH\Folder1
D:\Test1\Test2
C:\Test1\Test2
D:\Test2

D:\Dummy\File1
Dummy\File1
D:\Dummy\Test1\Test2
D:\Dummy\..\Test2

D:\WSH>


 途中で少々ブランクもあったが、この連載も今回で終了である。本連載では、Windows管理の面倒なルーチンワークを自動化する方法として、WSHを活用するための基礎について説明してきた。あくまで基礎解説に集中したので、すぐに役立つ実践的なスクリプトなどは紹介できなかったが、これらについては、マイクロソフトがインターネットで公開している以下のサイトが大いに役立つだろう。

 このスクリプト・センターには、Windowsシステム管理者を対象とした、実践的なサンプル・スクリプトが多数公開されている。スクリプトを自分でゼロから作る前に、利用できるサンプルがすでに紹介されていないかを検索するとよい。

 読者の皆さんの管理作業の軽減に少しでも本連載が役立てば幸いである。

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

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

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る