2013年2月25日月曜日

Scripting.FileSystemObject.Drive Object - Sample

Scripting.FileSystemObject.Driveの使用例


scanDrives.vbs:
 VBスクリプト。 Scripting.FileSystemObjectオブジェクトを作成してDrivesと

 EnumNetworkDrivesを使用して、マイコンピュータがマウントしている各ドライブをスキャンして
 各ドライブの情報をCSV形式で出力する

使い方:
 下のscanDrives.vbsをテキストエディタにコピペして、scanDrives.vbsで保存して実行

 次の例はC:\scanDrives.vbsに保存した場合の使用方法。


c:\>cscript /nologo c:\scanDrives.vbs
 Letter,Type,Total[Byte],Used[Byte],Available[Byte],Usage[%],Path
 C,Local HDD Drive,52428795904,48322715648,4106080256,7.83%,-
 D,Local HDD Drive,246629265408,151006982144,95622283264,38.77%,-
 E,Local HDD Drive,20971515904,10150678528,10820837376,51.60%,-
 F is not ready.
 Z,Network Drive,-,-,-,-,\\fileserver01\Shared\
 Y,Network Drive,-,-,-,-,\\fileserver02\NASShare
 Z,Network Drive,-,-,-,-,\\remoteservr01\c$


scanDrives.vbs
==================================================================================
'--------------------------------------------------------
' Scripting.FileSystemObject.Drive Object
'--------------------------------------------------------
' Property       | 機能
'----------------|---------------------------------------
' AvailableSpace | 利用可能な空きスペースの大きさを取得する
' DriveLetter    | ドライブ名(「C」など)を取得する
' DriveType      | ドライブの種類を取得する (0は不明なドライブ、1はリムーバブル・ディス
'                | ク、2はハードディスク、3はネットワーク・ドライブ、4はCD-ROM、5はRAM
'                | ディスクを表す。)
' FileSystem     | ドライブのファイルシステムを取得する
' FreeSpace      | ディスクの空きスペースの大きさを取得する
' IsReady        | ドライブが準備できているかどうかを取得する
' Path           | コロン付きのドライブ名を取得する
' RootFolder     | ルートフォルダを表すFolderオブジェクトを取得する
' SerialNumber   | ディスクのシリアルナンバーを取得する
' ShareName      | ネットワーク・ドライブの共有名を取得する
' TotalSize      | ディスクの総容量を取得する
' VolumeName     | ドライブのボリューム名を取得する
'---------------------------------------------------------

Set fso1 = CreateObject("Scripting.FileSystemObject")
Set drives = fso1.Drives
Set fso2 = CreateObject ("WScript.Network")
Set networkdrives = fso2.EnumNetworkDrives

WScript.Echo "Letter" & "," & "Type" & "," & "Total[Byte]" & "," & "Used[Byte]" & "," & "Available[Byte]" & "," & "Usage[%]" & "," & "Path"

For Each drive in drives
   letter = drive.DriveLetter
   if(drive.isReady) Then
   Select Case drive.DriveType
      Case "1"
         diskusage = FormatPercent (drive.AvailableSpace/drive.TotalSize)
         WScript.Echo letter & "," & "Removable HDD Drive" & "," & drive.TotalSize & "," & drive.TotalSize - drive.AvailableSpace & "," & drive.AvailableSpace & "," & diskusage & "," & "-"
         WScript.Echo letter
         diskusage = ""
      Case "2"
         diskusage = FormatPercent (drive.AvailableSpace/drive.TotalSize)
         WScript.Echo letter & "," & "Local HDD Drive" & "," & drive.TotalSize & "," & drive.TotalSize - drive.AvailableSpace & "," & drive.AvailableSpace & "," & diskusage & "," & "-"
         diskusage = ""
      Case "3"
         path = ""
         For i = 0 to networkdrives.Count - 1 Step 2
            if networkdrives.Item(i) = letter & ":" Then
               path = networkdrives.Item(i + 1)
            End if
         Next
         WScript.Echo letter & "," & "Network Drive" & "," & "-" & "," & "-" & "," & "-" & "," & "-" & "," & path
      Case "4"
         WScript.Echo letter & "," & "Disc Drive" & "," & "-" & "," & "-" & "," & "-" & "," & "-" & "," & "-"
      Case Else
         WScript.Echo letter & "," & "Unknown Drive Type" & "," & "-" & "," & "-" & "," & "-" & "," & "-" & "," & path
   End Select
   Else
         WScript.Echo letter & " is not ready."
   End if
Next
==================================================================================


DOSの妙 その1



妙: if文の処理ブロックは空ではいけない
@echo off
if "%1"=="" (

) else (
 echo %1
)
例えば、上の例は、 「) の使い方が誤っています。」  と怒られて処理が失敗します。
理由はif文ブロックが空だからです。
@echo off
if "%1"=="" (
 rem
) else (
 echo %1
)
remでもいいので、ブロックに何か入れてあげないといけません。
remって意味があるんですね、これも妙ですね

(まぁ、そもそも空のif文ブロックだったら書かないのが普通ですけど)