v1. よく使うコードの覚え書き
リファレンスというほど精緻なものではありませんが、よく使うものを集めました。
VBScript は終わりかけの技術だとは思いますが、VBA(Excel、Access などのマクロ)との相性はよいし、
適度にいい加減な感じがよいし、もう少し現役で動いてくれるでしょう。
スクリプトの制御
WScript.Quit 'スクリプト終了
pth = Replace(WScript.ScriptFullName, WScript.ScriptName, "") 'スクリプトのあるディレクトリ
Set x = WScript.CreateObject("Excel.Application") 'Excelオブジェクトを作成
x.WorkBooks.Add 'Excelオブジェクト操作の例
x.Cells(1,1) = "10" '同上
コマンド実行
Set wso = Wscript.CreateObject("WScript.Shell")
wso.Run "コマンド|関連付けられたファイル", ウィンドウ, 終了
ウィンドウ:0=非表示,1=通常,2=最小化,3=最大化,4=通常(非アクティブ),6=最小化(非アクティブ)
終了:0(False)=終了を待たずに続行, 1(True)=コマンド終了を待ってから続行
e = wso.Environment("System").Item("キー") '環境変数
キー:OS,Path,SystemDrive,SystmRoot,Windir,TMP,UserName,UserDomain
sf = wso.SpecialFolders("フォルダ名") '特殊フォルダ名
フォルダ名:AllUsersDesktop,AllUsersStartMenu,AllUsersPrograms,AllUsersStartup
Desktop,Fonts,StartMenu,Programs,Startup,MyDocuments,Favorites,Recent,SendTo
wso.Popup("メッセージ", 秒数, "タイトル", ボタン)
wso.RegRead "HKCU\Software\名前"
wso.RegDelete "HKCU\Software\名前"
wso.RegWrite "HKCU\Software\名前", "値", "タイプ"
タイプ:REG_SZ=文字列, REG_EXPAND_SZ=展開前の環境変数, REG_DWORD=32bit値, REG_BINARY=バイナリ値
ファイルシステムオブジェクト
Set fso = CreateObject("Scripting.FileSystemObject")
e = fso.fileExists("パス名") 'ファイルの存在確認
e = fso.FolderExists("パス名") 'フォルダの存在確認
fso.CopyFile "コピー元", "コピー先", 上書き
上書き:True=上書き, False=同名ファイルがあったらエラー
fso.CopyFolder "コピー元", "コピー先", 上書き
上書き:True=上書き, False=同名ファイルがあったらエラー
fso.MoveFile "移動元", "移動先"
fso.MoveFolder "移動元", "移動先"
fso.CreateFolder "移動元", "移動先"
fso.DeleteFile "削除ファイル", 読取専用処理
読取専用処理:True=削除, False=削除しない
fso.DeleteFolder "削除フォルダ", 読取専用処理
読取専用処理:True=削除, False=削除しない
Set fl = fso.GetFile("ファイル名") 'ファイルオブジェクトを取得
a = fl.Attribute
fl.Attribute = 属性 'ファイル属性
属性:0=Normal,1=ReadOnly,2=Hidden,4=System,8=Volume,16=Directoory,32=Archive,64=Alias,128=Compressed
sn = fl.ShortName '短いファイル名
sp = fl.ShortPath '短いパス名とファイル名
s = fl.Size 'ファイルサイズ(バイト)
s = fl.DateCreated '作成日時
s = fl.DateLastModified '更新日時
s = fl.DateLastAccessed '最終アクセス日時
fl.Name = "新ファイル名" '新しいファイル名
Set fl = fso.GetFolder(".") 'カレントフォルダを取得
Set fc = fl.Files 'カレントフォルダのファイル一覧を取得
For Each f in fc
MsgBox f.Name 'カレントフォルダのファイル名を全て表示
Next
Set s = fso.GetSpecialFolder(種類)
種類:0=Windowsフォルダ, 1=SYSTEMフォルダ, 2=TMPフォルダ
Set d = fso.GetDrive("ドライブ名")
If Not d.IsReady Then WScript.Quit 'ドライブの準備ができているか
kb = d.FreeSpace / 1024 '空き容量(バイト)
テキストファイル処理(1)
※ASCII、Shift_JIS、Unicode(UTF-16)〜 TF-8を読み込むと、望んだ結果が得られません。
Set t = fso.CreateTextFile("ファイル名", モード, コード)
モード:True=上書,False=既存ファイルならエラー
コード:-2=TristateuseDefault, -1(True)=Unicode(UTF-16), 0(False)=ASCII
Set t = fso.OpenTextFile("ファイル名", モード, 作成, コード)
モード:1=ForReading, 2=FroWriting, 8=ForAppending
作成:True=作成する, False=存在しないならエラー
コード:-2=TristateuseDefault, -1(True)=Unicode(UTF-16), 0(False)=ASCII
tmp = t.ReadLine '1行読み込み
tmp = t.ReadAll 'すべて読み込み
t.WriteLine "データ" '1行書き出し
Do Until t.AtEndOfStream 'ファイル終端の判別
MsgBox t.Line '行番号
Loop
t.Close
tmp = t.Read(文字数) '指定文字数読み込み
t.Skip(文字数) '指定文字数読み飛ばす
t.AtEndOfLine '行末かどうか判別
t.SkipLine '1行読み飛ばす
テキストファイル処理(2)
※Unicode(UTF-8)〜 UTF-16を読み込むと、望んだ結果が得られません。
Set tFile = CreateObject("ADODB.Stream")
tFile.Type = モード
1=バイナリ, 2=テキスト
tFile.Charset = "UTF-8"
tFile.Open
tFile.LoadFromFile "読取ファイル名"
tmp = tFile.ReadText(-1)
-1=全行読み取り, -2=一行読み取り
Set tNewFile = CreateObject("ADODB.Stream")
tNewFile.Type = 2
tNewFile.Charset = "UTF-8"
tNewFile.Open
tNewFile.WriteText tmp, モード
0=文字のみ, 1=文字+改行
tNewFile.SaveToFile "書込ファイル名", モード
1=新規作成許可, -1=上書き
tFile.Close
tNewFile.Close
Arguments オブジェクト
Set arg = WScript.Arguments 'スクリプトのアイコンにドラッグ&ドロップされたファイル名を取得
For a = 0 to arg.Count - 1
f(a) = arg(a)
Next
正規表現
Set rxp = New RegExp
rxp.Pattern = "正規表現"
If rxp.Test("検索対象文字列") = False WScript.Quit
Set mts = rxp.Execute "検索対象文字列"
Msgbox mts.Count 'マッチした文字列の数
Msgbox mts(0).Value '最初にマッチした文字列
Msgbox mts(0).Length '最初にマッチした文字列の長さ
Msgbox mts(0).FirstIndex '最初にマッチした文字列位置(1文字目は 0 )
s = mt.REplace("置換対象の文字列", "置換後の文字列")
For Each mt In mts 'Matchsコレクションを逐次全て処理
Msgboxmt.Value
Next