第11回(最終回) WSHスクリプトからのファイル操作(2):Windows管理者のためのWindows Script Host入門(2/2 ページ)
FileSystemObjectを利用したWSHからのファイル操作法。今回はフォルダの操作とドライブの操作について解説する。
ドライブ情報の取得
次に、ドライブ情報の取得について解説する。FSOオブジェクトでは、ドライブを列挙したり、ドライブの空きスペースの大きさを取得したりすることができる。ただしFSOオブジェクトではドライブの情報を取得できるだけで、ドライブの設定を更新することはできない。ネットワーク・ドライブの接続や切断は、FSOオブジェクトではなく、第8回で解説したWshNetworkオブジェクトを利用する。FSOにはドライブを表す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システム管理者を対象とした、実践的なサンプル・スクリプトが多数公開されている。スクリプトを自分でゼロから作る前に、利用できるサンプルがすでに紹介されていないかを検索するとよい。
読者の皆さんの管理作業の軽減に少しでも本連載が役立てば幸いである。
Copyright© Digital Advantage Corp. All Rights Reserved.