(for Internet Explorer)
← ▼ ▲
↑
g_Finalizing
Dim g_Finalizing as boolean
グローバル変数の後始末処理を行っているときかどうか。
(src)
→ グローバル変数の初期化、後始末、g_InitializeModule、g_FinalizeModule
参考
← ▼ ▲
vbslib_helper.exe
→ vbslib_helper_src フォルダー
VBScript だけではできないが、C言語ではできる機能を実行するプログラムです。
vbslib の内部から必要に応じて自動的に起動されます。
vbslib_helper.exe ファイルは、
g_vbslib_ver_folder
に格納してください。
ソース：
← ▼ ▲
処理フロー （vbs_inc/setting）
[ 親: vbs_inc ]
[ 親: setting フォルダ ]
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
'//=== Load setting script
'//=== read and execute g_IncludePathes
CallInitializeInModules
VBScript global code
コマンドプロンプトに変える（場合によっては再起動する）
(src)
(src)
→ 正常終了するとき
→ エラーが発生して終了するとき
CallFinalizeInModules
Setting_onAfterInclude
モジュールの初期化をする
モジュールの後始末をする
メイン・スクリプト
→ 処理フロー (Err2)
関連
setting フォルダ
scriptlib フォルダ
Setting_getIncludePathes
設定ファイルをロード（実行）する
モジュールをロード（実行）する
InitializeModule
あるフォルダの中あるすべてのスクリプトの既定の設定
← ▼ ▲
正常終了時の動作
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 に設定してください。
/SuccessRet - メイクファイルから vbslib を使ったスクリプトを呼び出すとき
メイクファイルは、起動したコマンドのエラーレベルが 0 でないときは、エラーが発生
したものとみなします。 しかし、vbslib を使ったスクリプトが正常終了したときは、
エラーレベルが 21 になるため、メイクファイルは処理を中断します。
正常終了したときに、エラーレベルが 0 になるようにするには、/SuccessRet:0
オプションを指定して vbs を起動してください。 ただし、ごくまれに vbslib がキャッチ
できないエラーが発生することがありますが、そのときも、エラーレベルが 0 になる
ため、正常終了と区別することはできません。
cscript sampe.vbs /SuccessRet:0
テスト
→ [T_SuccessRet] /SuccessRet オプションによるエラーレベル
← ▼ ▲
vbslib のエラー発生時の動作
main 関数の中でエラーが発生したら、標準化されたエラーメッセージを表示し、
適切なエラーレベルを、wscript.exe / cscript.exe を呼び出したプロセスへ返します。
wscipt.exe, cscript.exe は、スクリプトの内部でエラーが発生しても、エラーレベルは
0 になっています。 これではエラーが発生したかどうかがわからないので、vbs_inc
がエラーをキャッチして、エラー番号をエラーレベルにします。
(src)
→ エラーメッセージ文字列の標準書式(XML版)
関連
→ 終了、返り値（エラーレベル）を指定する (VBScript)
→ 正常終了時の動作
← ▼ ▲
バージョン判定、環境変数
処理フロー
VBScript global code
[vbs_inc_400.vbs]
[メイン.vbs]
VBScript global code
[vbs_inc_setting.vbs など]
全スクリプト共通の既定の設定
（全 scriptlib フォルダ）
SetVar
main / main2
SetVar
１つのスクリプトで使う設定
ClassI_validate
new ClassA
Class_Initialize
Me.Ver = CInt2( GetVar( "ClassA_Ver" ) )
If IsEmpty( Me.Value ) Then Me.Ver = 200
数値を自動的に
設定する
環境変数
Setting_onAfterInclude
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 関数の
最初で呼び出してください。
Setting_getIncludePathes
を使います。
SetVar
で
インスタンスを特定する必要が無い
どの設定ファイルを使うか、などを選択するときに、環境変数を使います。
一般的な設定値は、環境変数ではなく、 XML 形式などの設定ファイルや、
の、どのバージョンを使うか、
演算器的なオブジェクト
静的オブジェクト・スクリプト・ファイル
を使ったほうが、階層化できたりして扱いやすいです。
→ setting フォルダ
関連
OS の環境変数の設定
→ set_
→ FuncRedir_add
関数コールのリダイレクト
→ LoadEnvVars
ファイルに書かれた環境変数の集合を使う
→ モジュールのグローバル変数の初期化
InitializeModule
SetVar
あるフォルダの中にあるスクリプトの
既定の設定（scriptlib フォルダごと）
Setting_getIncludePathes
g_Vers.Add "Disable", 1
あるフォルダの中にある
スクリプトの InitializeModule で
設定される内容の選択
g_Vers.Add "Disable", 1
１つのスクリプトで使う InitializeModule
で設定される内容の選択
関連
→ 環境変数を取得する (VBScript)
→ TestCommon_setVariables
Test.vbs で共通の環境変数とファイルのチェック
→ GetMainSetting 関数 (vbsool)
スクリプト内で共通の設定値
← ▼ ▲
IsDefined
Function IsDefined( Symbol as string ) as boolean
→ GetRef
指定したシンボルの関数が定義されているかどうかを返します。
(src)
[ 親: バージョン判定 ]
サンプル：
If not IsDefined( "copy" ) Then ...
参考
← ▼ ▲
g_Vers
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 の一部
[ テスト ]
→ vbslib2 から vbslib3 へバージョンアップする
(src)
[ 親: バージョン判定 ]
バージョンの判定は、不等号を使ってください。
g_Vers("vbslib_ver") = 4.0
バージョン番号
"vbslib"
0.0 … バージョン切り替えテスト用
2.0 … ver2.00 をそのまま使う （vbs_inc のデフォルト）
3.0 … ver3.00 を使う
4.0 … ver4.00 を使う
設定サンプル：
参考
関連
→ VarStack
値は文字列や数値やオブジェクトなどを格納できます。
テスト
→ T_Var.vbs # T_g_Vers_Stack
SetVar
で設定される変数と同じ変数の領域（Dictionary）です。 （vbslib ver4 より）
VarStack
を使うことができます。
← ▼ ▲
CutPropertyM
Dim g_Vers("CutPropertyM") as string
→ Dic_addNewObject
関連
True なら Name プロパティを、False なら m_Name プロパティを使います。
g_Vers("CutPropertyM") = False
キーワード：
Name, m_Name
サンプル
ライブラリが提供するいくつかの関数の中で使われるオブジェクトに対して、Name プロパティを
参照するか、m_Name プロパティを参照するかを選べます。
デフォルトは、True です。
← ▼ ▲
ThisIsOldSpec
Sub ThisIsOldSpec()
現在実行している関数が、廃止されようとしている関数であることを警告します。
ファイル：
vbs_inc_400.h
(src)
g_debug <> 0 のときは、初めて ThisIsOldSpec を呼び出したときにブレークします。
関連
→ SetErrorOfOldSpec
← ▼ ▲
g_cut_old
Dim g_cut_old as boolean
vbslib の古い関数を呼び出したときに、デバッガでブレークするようにします。
→ vbslib2 から vbslib3 へバージョンアップする
参考
(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
に次のように記述してください。
→ ThisIsOldSpec
g_cut_old は、廃止されました。 代わりに ThisIsOldSpec を使ってください。
SetupVbslibParameters
← ▼ ▲
SetErrorOfOldSpec
Sub SetErrorOfOldSpec()
ThisIsOldSpec が呼ばれたら、エラーにするように設定します。
ファイル：
vbs_inc_400.h
(src)
関連
→ ThisIsOldSpec
← ▼ ▲
GetOSVersion
Function GetOSVersion() as double
Windows のバージョンを返します。
5.0 = Windows 2000
5.1 = Windows XP
6.0 = Windows Vista
6.1 = Windows 7
(src)
[ 親: バージョン判定 ]
← ▼ ▲
set_, SetVar
set_ "FooVar", "1"
サンプル：
Sub SetVar( Symbol as string, Value as variant )
vbslib の環境変数を設定します。
【引数】
Symbol
Value
変数名
設定する値、Empty = 変数を未定義にする
関連
→ GetVar
→ SetVarBreak
(src)
→ [T_Var] vbslib の環境変数のテスト
→ env
[ 親: 環境変数 ]
set_ は、OS の環境変数には設定されます。
SetVar は、OS の環境変数には設定されません。そのため、RunProg などで
子プロセスを起動しても、伝達されません。
その代わり、文字列以外（数値や配列など）を設定することができます。
set_ も SetVar も、env を使って参照することができます。
注意
環境変数はグローバル変数と同じなので、なるべく使わないでください。
下記のいずれかが使用できないか検討してください。
・setting フォルダ, setting_default フォルダ
・設定関数
・オブジェクトのメソッド、プロパティ
→ clib の環境変数
→ T_Var フォルダ
テスト
Sub set_( Symbol as string, Value as string )
→ Environment (Shell)
SetVar "FooVar", 1
→ RunBat
(src)
→ 条件ブレーク
→ T_Var フォルダ
テスト
→ VarStack
OS の環境変数
ローカル環境変数 （vbslib が持つ辞書）
→ SetDefaultEnvironmentVariables
← ▼ ▲
GetVar
v = GetVar( "FooVar" )
サンプル：
Function GetVar( Symbol as string ) as variant
vbslib の環境変数の値を返します。
【引数】
Symbol
返り値
変数名
Symbol に指定した環境変数の値
関連
→ SetVar
(src)
→ SetVarBreak
値を設定していない環境変数を指定したときは、エラーが発生するのではなく、Empty を返し
ます。
OS の環境変数を指定することもできます。
→ env
[ 親: 環境変数 ]
→ 条件ブレーク
→ T_Var フォルダ
テスト
T_Var1
T_Var2
変数名に % を付けたものを指定した場合、% が無い変数名の値が返ります。
GetVar( "FooVar" ) = GetVar( "%FooVar%" )
← ▼ ▲
SetVarBreak
(src)
SetVarBreak "FooVar", Empty
サンプル：
Sub SetVarBreak( Symbol as string, Opt as Empty )
vbslib の環境変数の値を設定、または参照しているところでブレークするように設定します。
【引数】
Symbol
Opt
変数名
Empty を指定してください
関連
→ SetVar
→ GetVar
→ env
[ 親: 環境変数 ]
← ▼ ▲
VarStack
Sub funcA()
Set v_= new VarStack
set_ "Foo2", "2a"
SetVar "Foo3", 3
g_Vers "Foo4", 1
End Sub '// 元の環境変数の値に戻る
オブジェクトが破棄されるタイミングで、環境変数の値を元に戻します。
下記の場合、関数から抜けると戻します。
(src)
[ 親: 環境変数 ]
set_
SetVar
g_Vers
← ▼ ▲
LoadEnvVars
(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 )
関連
→ Dic_add
→ SaveEnvVars
→ ClearEnvVars
Set envs = CreateObject( "Scripting.Dictionary" )
LoadEnvVars "settings.txt", envs
ファイルに入っている環境変数の設定を、辞書に格納する
サンプル
Option_ 引数に辞書オブジェクトを渡すと、その辞書オブジェクトの内容が変わるだけで、
環境変数の値は変わりません。
サンプル
サンプル
← ▼ ▲
SaveEnvVars
(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
テスト
関連
→ VarStack
← ▼ ▲
ClearEnvVars
Sub ClearEnvVars()
現在のプロセスの環境変数をほぼすべて削除します。
(src)
[ 親: 環境変数 ]
→ T_Var.vbs # T_LoadEnvVars
テスト
VBScript から削除できない環境変数は残ります。
← ▼ ▲
OpenForEnvVarsFile
→ OpenForRegFile
関連
Function OpenForEnvVarsFile( EnvVarsFilePath as string ) as EditEnvVarsFile
(src)
環境変数ファイルを編集します。
Dim f : Set f = OpenForEnvVarsFile( "settings.txt" )
echo f.get_( "VAR_A" )
f.set_ "VAR_A", "1"
f.select_ "VAR_A", "1", Array( "VAR_A", "VAR_B", "VAR_C" ), "0"
f = Empty '// Write
【引数】
EnvVarsFilePath
返り値
環境変数ファイルのパス
EditEnvVarsFile オブジェクト
サンプル：
ランダムアクセスに対応しています。 OpenForRead や OpenForWrite のように
シーケンシャル（ファイルの先頭から順番）にアクセスする必要はありませんし、
変更しないキーまで Write する必要はありません。
存在しない環境変数を新規に set_ したときは、ABC 順でファイルに記述されます。
Empty の値を set_ すると、その環境変数はファイルから削除されます。
settings.txt
VAR_A
1
1
VAR_A
→ T_VarFile.vbs # [T_VarFile1]
テスト
VAR_A
← ▼ ▲
EditEnvVarsFile クラス
.Path
Property .Path as string
.get_
Function .get_( Name as string ) as string
Name が定義されていないときは、Empty を返します
Sub .set_( Name as string, Value as string or Empty )
.set_
Sub select_( Name as string, Value as string,
OtherNames as array of string, OtherValue as string )
.select_
→ OpenForEnvVarsFile
関連
← ▼ ▲
エラー処理 （Err2）
→ Raise
新規にエラーを発生させます。
→ エラー処理 （Err 版）
→ Error
未知のエラーを発生させます。
→ Err2 のコーディング例 (TryStart, TryEnd)
→ Err2 オブジェクト
→ FinObj クラス
Finally ブロックに似た記述をする
[ テスト ]
→ エラーコード
→ エラー発生時の動作
→ エラーメッセージ文字列の標準書式
→ Err2 の処理フロー
関連
テスト
→ T_Err2 フォルダ
→ [T_Err2] Err2 オブジェクトのテスト
← ▼ ▲
Err2 のコーディング例 (TryStart, TryEnd)
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num = E_FileNotExist Then ... : e.Clear
If e.num <> 0 Then e.Raise
→ メンバ変数 (Err2)
関連
→ Err2::BreakErrID
TryStart
TryStart
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
If Trying Then ...
If Trying Then ...
If TryEnd Then On Error GoTo 0
If e.num = E_FileNotExist Then ... : e.Clear
If e.num <> 0 Then e.Raise
Try ブロックの中が、1行だけのとき
Try ブロックの中が、複数行のとき
TryEnd
TryEnd
TryStart
Trying
Trying
Trying は、毎行記述する必要があります。
エラーが発生しても、TryStart〜TryEnd の間で続きを実行する場合は、
Trying は不要です。
→ エラー処理 （Err 版）
TryStart を使うと、エラーが発生した場所で、ブレークさせることができます。
Clear
Raise
Clear
Raise
Err2
Err2
E_FileNotExist
E_FileNotExist
ブレークさせるときは、Err2::BreakErrID を設定してください。
On Error Resume Next を呼び出したらブレークしなくなるので、TryStart が、
On Error Resume Next を呼び出すべきかどうかを判定します。
サンプル
→ _err2_test.lzh
Try ブロックの中で発生したエラーでブレークさせるとき
If g_count_up(1)=0 Then Stop '// watch-> g_count [DEBUGGING]
echo "g_count(1)=" & g_count(1)
If g_count(1) < 99 Then
If TryStart(e) Then On Error Resume Next
End If
→ g_count, g_count_up
参考
→ エラーメッセージをチェックするテスト
関連
エラーをキューにためる
→ EnqueueAndClear (Err2)
←
↓