(for Internet Explorer)
vbs_inc.vbs の絶対パス
Dim  g_vbslib_path  as string
vbs_inc.vbs をインクルードする前
vbs_inc.vbs をインクルードした後
vbs_inc.vbs の相対パス。
相対パスの基準は、すべてのスクリプトのベースフォルダなど。
(src)
インクルードする前の g_vbslib_path は、
にユーザが記述します。
Dim  g_vbslib_folder  as string
(src)
関連
→ g_vbslib_parent_folder
g_Ver の設定に関わらず、最初の scriptlib フォルダの親になります。
scriptlib フォルダの絶対パス。末尾に \ が付く
Dim  g_vbslib_ver_folder  as string
(src)
関連
g_Ver の設定によって、フォルダパスは変わります。
vbs_inc_XXX.vbs があるフォルダの絶対パス。末尾に \ が付く
Dim  g_SrcPath as string
g_IncludePathes
で、グローバル領域を実行しているとき、
インクルードしているスクリプトファイル(.vbs)の絶対パス。
(src)
だけ定義されます。
g_SrcPath のサンプルがあります
参考
g_SrcPath のサンプルがあります
Dim  g_MainPath as string
メイン.vbs のスクリプトファイル(.vbs)の絶対パス。
(src)
' Global Variable
Dim  g_Test

Function  InitializeModule( ThisPath )
  Set  g_Test = new TestScript : ErrCheck : Set g_TestScriptGlobals.Test = g_Test
End Function
Dim  g_InitializeModule
Set  g_InitializeModule = GetRef( "InitializeModule" )

Function  FinalizeModule( ThisPath, Reason )
  g_Test.Finish
End Function
Dim g_FinalizeModule: Set g_FinalizeModule = GetRef( "FinalizeModule" )
Dim g_FinalizeLevel:      g_FinalizeLevel  = 100  ' If smaller, called early
vbs_inc.vbs でインクルードするモジュールの中にあるグローバル変数は、下記のように
初期化関数を g_InitializeModule に設定してください。後始末が必要なら、g_FinalizeModule
と g_FinalizeLevel を設定してください。 g_FinalizeLevel が小さいモジュールほど先に呼ばれます。
これらによって、グローバル変数の初期化や後始末の順番を制御します。
サンプル (TestScript.vbs)
(src)
配列のグローバル変数
  '--- start of parameters for vbslib include -------------------------------
Dim  g_LineOfThreadSwitch()
main より後のグローバル領域に、配列を宣言すると、main 関数終了後にエラーになることが
あります。そのときは、下記のように SetupVbslibParameters の中で宣言してください。
初期化関数で依存するモジュールがなくても、(モジュール).vbs をダブルクリックして、
文法チェックができます。

Setting_getIncludePathes にモジュールを登録して、vbs_inc.vbs をダブルクリックすると、
初期化、後始末のテストができます。
参考
同じモジュールの中のオブジェクトの Class_Terminate が呼ばれる順番は、グローバル変数に
格納した順番と同じです。
Dim  g_Finalizing  as boolean
グローバル変数の後始末処理を行っているときかどうか。
(src)
参考
→ vbslib_helper_src フォルダー
VBScript だけではできないが、C言語ではできる機能を実行するプログラムです。
vbslib の内部から必要に応じて自動的に起動されます。
vbslib_helper.exe ファイルは、
に格納してください。
ソース:
VBScript global code
'// start of vbslib include
Execute g_f.ReadAll
ResumePush
On Error Resume Next
main / main2
ResumePop
[メイン.vbs]
[vbs_inc.vbs]
Execute g_f.ReadAll
[vbs_inc_400.vbs]
VBScript global code
ChangeScriptMode
'//=== read and execute g_IncludePathes
CallInitializeInModules
VBScript global code
コマンドプロンプトに変える(場合によっては再起動する)
(src)
(src)
CallFinalizeInModules
モジュールの初期化をする
モジュールの後始末をする
メイン・スクリプト
関連
設定ファイルをロード(実行)する
モジュールをロード(実行)する
あるフォルダの中あるすべてのスクリプトの既定の設定
(src)
main 関数からそのまま返ると、エラーレベルは 21 になります。
これは、wscipt.exe, cscript.exe は、スクリプトの内部でエラーが発生しても、
エラーレベルは 0 になっており、正常に終了したかどうかを区別するためです。
内部フロー
main
ResumePop
CallFinalizeInModules
If not IsEmpty( g_ExitCode ) Then  WScript.Quit  g_ExitCode
WScript.Quit  21
エラーレベルを指定するときは、g_ExitCode に設定してください。
メイクファイルは、起動したコマンドのエラーレベルが 0 でないときは、エラーが発生
したものとみなします。 しかし、vbslib を使ったスクリプトが正常終了したときは、
エラーレベルが 21 になるため、メイクファイルは処理を中断します。
正常終了したときに、エラーレベルが 0 になるようにするには、/SuccessRet:0
オプションを指定して vbs を起動してください。 ただし、ごくまれに vbslib がキャッチ
できないエラーが発生することがありますが、そのときも、エラーレベルが 0 になる
ため、正常終了と区別することはできません。
cscript sampe.vbs /SuccessRet:0
テスト
main 関数の中でエラーが発生したら、標準化されたエラーメッセージを表示し、
適切なエラーレベルを、wscript.exe / cscript.exe を呼び出したプロセスへ返します。
wscipt.exe, cscript.exe は、スクリプトの内部でエラーが発生しても、エラーレベルは
0 になっています。 これではエラーが発生したかどうかがわからないので、vbs_inc
がエラーをキャッチして、エラー番号をエラーレベルにします。
(src)
関連
処理フロー
VBScript global code
[vbs_inc_400.vbs]
[メイン.vbs]
[vbs_inc_setting.vbs など]
SetVar
main / main2
SetVar
1つのスクリプトで使う設定
ClassI_validate
new ClassA
Class_Initialize
Me.Ver = CInt2( GetVar( "ClassA_Ver" ) )
If IsEmpty( Me.Value ) Then  Me.Ver = 200
数値を自動的に
設定する
環境変数
If IsEmpty( g_ClassI ) Then
  Dim  name : name = GetVar( "ClassI" )
  If IsEmpty( name ) Then
    ... (自動判定ルーチン)
    name = "ClassA"
  End If
  Select Case  name
    Case "ClassA" : Set g_ClassI = new ClassA
    Case "ClassB" : Set g_ClassI = new ClassB
  End Select
  Set ClassI_validate = g_ClassI
End If
インスタンスを
自動的に
選択する
設定値を指定するときは、main または
デフォルト(自動判定など)の設定値を使うときは、SetVar を使いません。
優先度の高いものから並べると、main 関数の SetVar > setting の SetVar > OS の環境変数
 > 自動選択、の順になります。
デフォルト値の決定方法は、
次のものがあります。
 ・固定値
 ・設定ファイルからのリード
 ・自動判定
環境変数の値を使った後は、SetVar をしても無効なので、SetVar は main 関数の
最初で呼び出してください。
を使います。
インスタンスを特定する必要が無い
どの設定ファイルを使うか、などを選択するときに、環境変数を使います。

一般的な設定値は、環境変数ではなく、 XML 形式などの設定ファイルや、
の、どのバージョンを使うか、
を使ったほうが、階層化できたりして扱いやすいです。
関連
OS の環境変数の設定
関数コールのリダイレクト
ファイルに書かれた環境変数の集合を使う
InitializeModule
SetVar
あるフォルダの中にあるスクリプトの
既定の設定(scriptlib フォルダごと)
Setting_getIncludePathes
g_Vers.Add  "Disable", 1
あるフォルダの中にある
スクリプトの InitializeModule で
設定される内容の選択
g_Vers.Add  "Disable", 1
1つのスクリプトで使う InitializeModule
で設定される内容の選択
関連
Test.vbs で共通の環境変数とファイルのチェック
スクリプト内で共通の設定値
Function  IsDefined( Symbol as string ) as boolean
→ GetRef
指定したシンボルの関数が定義されているかどうかを返します。
(src)
サンプル:
If not IsDefined( "copy" ) Then ...
参考
Dim g_Vers as Scripting.Dictionary
vbslib のバージョン番号です。
vbslib_ver = g_Vers("vbslib")
If     vbslib_ver >= 4.0 Then  g_vbslib_folder = g_vbslib_folder + "vbslib400\"
ElseIf vbslib_ver >= 3.0 Then  g_vbslib_folder = g_vbslib_folder + "vbslib300\"
Else                           g_vbslib_folder = g_vbslib_folder + "vbslib200\"
判定サンプル: vbs_inc.vbs の一部
[ テスト ]
(src)
バージョンの判定は、不等号を使ってください。
g_Vers("vbslib_ver") = 4.0
バージョン番号
"vbslib"
0.0 … バージョン切り替えテスト用
2.0 … ver2.00 をそのまま使う (vbs_inc のデフォルト)
3.0 … ver3.00 を使う
4.0 … ver4.00 を使う
設定サンプル:
参考
関連
値は文字列や数値やオブジェクトなどを格納できます。
テスト
→ T_Var.vbs # T_g_Vers_Stack
で設定される変数と同じ変数の領域(Dictionary)です。 (vbslib ver4 より)
を使うことができます。
Dim  g_Vers("CutPropertyM")  as string
関連
True なら Name プロパティを、False なら m_Name プロパティを使います。
g_Vers("CutPropertyM") = False
キーワード:
サンプル
ライブラリが提供するいくつかの関数の中で使われるオブジェクトに対して、Name プロパティを
参照するか、m_Name プロパティを参照するかを選べます。
デフォルトは、True です。
Sub  ThisIsOldSpec()
現在実行している関数が、廃止されようとしている関数であることを警告します。
ファイル:
vbs_inc_400.h
(src)
g_debug <> 0 のときは、初めて ThisIsOldSpec を呼び出したときにブレークします。
関連
Dim  g_cut_old as boolean
vbslib の古い関数を呼び出したときに、デバッガでブレークするようにします。
参考
(src)
vbslib のユーザーのサンプル:
g_cut_old = True
If g_cut_old Then Stop :If g_cut_old=I_CutOldErr Then Error
vbslib の作成者のサンプル:
デフォルトは True になります。
False にするには、
  '--- start of parameters for vbslib include -------------------------------
Dim g_cut_old : g_cut_old = False
に次のように記述してください。
g_cut_old は、廃止されました。 代わりに ThisIsOldSpec を使ってください。
Sub  SetErrorOfOldSpec()
ThisIsOldSpec が呼ばれたら、エラーにするように設定します。
ファイル:
vbs_inc_400.h
(src)
関連
Function  GetOSVersion() as double
Windows のバージョンを返します。
5.0 = Windows 2000
5.1 = Windows XP
6.0 = Windows Vista
6.1 = Windows 7
6.2 = Windows 8
(src)
関連
  set_    "FooVar", "1"
サンプル:
Sub  SetVar( Symbol as string, Value as variant )
vbslib の環境変数を設定します。
【引数】
Symbol
Value
変数名
設定する値、Empty = 変数を未定義にする
関連
(src)
set_ は、OS の環境変数には設定されます。
SetVar は、OS の環境変数には設定されません。そのため、RunProg などで
子プロセスを起動しても、伝達されません。
その代わり、文字列以外(数値や配列など)を設定することができます。
set_ も SetVar も、env を使って参照することができます。
注意
環境変数はグローバル変数と同じなので、なるべく使わないでください。
下記のいずれかが使用できないか検討してください。
・設定関数
・オブジェクトのメソッド、プロパティ
→ clib の環境変数
→ T_Var フォルダ
テスト
Sub  set_( Symbol as string, Value as string )
  SetVar  "FooVar", 1
(src)
→ T_Var フォルダ
テスト
OS の環境変数
  v = GetVar( "FooVar" )
サンプル:
Function  GetVar( Symbol as string ) as variant
vbslib の環境変数の値を返します。
【引数】
Symbol
返り値
変数名
Symbol に指定した環境変数の値
関連
(src)
値を設定していない環境変数を指定したときは、エラーが発生するのではなく、Empty を返し
ます。

OS の環境変数を指定することもできます。
→ T_Var フォルダ
テスト
T_Var1
T_Var2
変数名に % を付けたものを指定した場合、% が無い変数名の値が返ります。
  GetVar( "FooVar" ) = GetVar( "%FooVar%" )
(src)
  SetVarBreak  "FooVar", Empty
サンプル:
Sub  SetVarBreak( Symbol as string, Opt as Empty )
vbslib の環境変数の値を設定、または参照しているところでブレークするように設定します。
【引数】
Symbol
Opt
変数名
Empty を指定してください
関連
Sub  FuncA()
  Set v_= new VarStack

  set_   "Foo2", "2a"
  SetVar "Foo3",  3
  g_Vers "Foo4",  1

End Sub  '// 元の環境変数の値に戻る
オブジェクトが破棄されるタイミングで、環境変数の値を元に戻します。
下記の場合、関数から抜けると戻します。
(src)
(src)
Sub  LoadEnvVars( Path_ofSetCommandLog, Option_ )
ファイルを参照して、複数の環境変数を現在のプロセスに設定します。
【引数】
Path_ofSetCommandLog
環境変数の設定の一覧のファイルパス、または辞書
環境変数全体を、ファイルに記述された値に設定します。
  LoadEnvVars  "settings.txt", Empty
setting.txt
VAR1=value1
VAR2=3
VAR3=cmd
→ T_Var.vbs # T_LoadEnvVars
テスト
今まで設定されていた環境変数のうち、Path_ofSetCommandLog のファイルに記述されて
いない環境変数は、削除されます。 ただし、Option_ = F_Append にすると削除されません。
Option_
Empty または F_Append または辞書
setting.txt は、コマンドプロンプトの set (Enter) で出力される内容と同じフォーマットです。
VBScript では、下記のように記述します。
g_sh.Run  "cmd /C (set > ""C:\folder\settings.txt"")",, True
参考
環境変数全体を、辞書に入っている内容に設定します。
  Set dic = CreateObject( "Scripting.Dictionary" )
  dic.Item( "VAR1" ) = "value1"
  dic.Item( "VAR2" ) = "3"
  LoadEnvVars( dic, Empty )
関連
  Set envs = CreateObject( "Scripting.Dictionary" )
  LoadEnvVars  "settings.txt", envs
ファイルに入っている環境変数の設定を、辞書に格納する
サンプル
Option_ 引数に辞書オブジェクトを渡すと、その辞書オブジェクトの内容が変わるだけで、
環境変数の値は変わりません。
サンプル
サンプル
(src)
Sub  SaveEnvVars( Path_ofSetCommandLog, Option_ )
現在の環境変数をファイルに保存するか、辞書に格納します。
【引数】
Path_ofSetCommandLog
ファイルパス、または辞書、または Empty
Option_
Empty 固定
Path_ofSetCommandLog に、値が入っていない(Empty の)変数を指定したら、
内部で Dictionary オブジェクトを生成して、その中に環境変数の設定値を
格納します。
サンプル:
  Dim  envs
  SaveEnvVars  envs, Empty  '//[out] envs
  echo  envs
→ T_Var.vbs # T_LoadEnvVars
テスト
関連