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