読者です 読者をやめる 読者になる 読者になる

VBScript入門とTips

vbscript

VBScriptを書く機会があったので、そのときに調べたTipsメモ。

配列操作

サイズ取得、push、pop、shift、unshiftを行なう関数を書きました。
関数に渡す変数は可変配列として宣言する必要があります。クラスで書いたほうがいいですね。

' サイズ取得
Function arraySize(array)
    Dim n
    arraySize = UBound(array) - LBound(array) + 1
End Function


Sub pushArray(array, f)
    Dim size
    ReDim Preserve array(UBound(array)+1)      
    array(UBound(array)) = f
End Sub


Function popArray(array) 
    Dim f
    f = array(UBound(array))
    ReDim Preserve array(UBound(array) - 1)

    popArray = f
End Function


Function shiftArray(array)
    Dim p
    p = array(0)

    Dim i
    For i = 1 To UBound(array) Step 1
    	array(i-1) = array(i)
    Next
    ReDim Preserve array(UBound(array) - 1)

    shiftArray = p
End Function


Sub unShiftArray(array, f)
    ReDim Preserve array(UBound(array) + 1)
    
    Dim i
    For i = 0 To UBound(array)-1  Step 1
    	array(i+1) = array(i)
    Next

    array(0) = f
End Sub

ファイル書き込み

ファイルハンドルを得て、一行ずつ書き込む。

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim logFile
Set logFile = FSO.OpenTextFile("log.txt", 2 , True)
logFile.WriteLine("error!!")

logFile.Close
Set logFile = Nothing
Set FSO = Nothing

ファイル読み込み

ファイルハンドルを得て、ファイルの最後まで一行ずつ読み込む。

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim ReadStream = FSO.OpenTextFile("read.txt", 1, False)

Dim line
Do While ReadStream.AtEndOfStream <> Then
    line = ReadStream.ReadLine
    WScript.Echo line
Loop

ReadStream.Close

Set ReadStream = Nothing
Set FSO = Nothing

ディレクトリ一覧を取得

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")

Dim folder
folder = FSO.GetFolder("C:\")
For Each SubFolder In folder.SubFolders
   WScript SubFolder.Name
   WScript SubFolder.Path
Next

Set FSO = Nothing

正規表現の後方参照

Dim filename 
filename = "test.txt"

Dim regEx
Set regEx             = New RegExp
regEx.Patter         = "\.(.*)?"
regEx.Global        = True
regEx.IgnoreCase = True

Dim oMatch, oMatches, ext
Set oMatches = regEx.Execute(filename)

' 最初に一致したもの
Set oMatch = oMatches(0)

' $1
ext = oMatch.SubMatches(0)


Set regEx = Nothing
Set oMatch = Nothing
Set oMatches = Nothing

環境変数参照

Dim objWshShell

Set objWshShell = WScript.CreateObject("WScript.Shell")

WScript.Echo objWshShell.ExpandEnvironmentStrings("%ProgramFiles%")


Set objWshShell = Nothing


環境変数について