(for Internet Explorer)
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
モジュールの初期化をする
モジュールの後始末をする
メイン・スクリプト
関連
設定ファイルをロード(実行)する
モジュールをロード(実行)する
あるフォルダの中あるすべてのスクリプトの既定の設定
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
テスト
→ [T_SuccessRet] /SuccessRet オプションによるエラーレベル
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
(src)
  set_    "FooVar", "1"
サンプル:
Sub  SetVar( Symbol as string, Value as variant )
vbslib の環境変数を設定します。
【引数】
Symbol
Value
変数名
設定する値、Empty = 変数を未定義にする
関連
(src)
→ [T_Var] vbslib の環境変数のテスト
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
テスト
関連
Sub  ClearEnvVars()
現在のプロセスの環境変数をほぼすべて削除します。
(src)
→ T_Var.vbs # T_LoadEnvVars
テスト
VBScript から削除できない環境変数は残ります。
関連
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
返り値
環境変数ファイルのパス
サンプル:
ランダムアクセスに対応しています。 OpenForRead や OpenForWrite のように
シーケンシャル(ファイルの先頭から順番)にアクセスする必要はありませんし、
変更しないキーまで Write する必要はありません。

存在しない環境変数を新規に set_ したときは、ABC 順でファイルに記述されます。
Empty の値を set_ すると、その環境変数はファイルから削除されます。
settings.txt
VAR_A
1
1
VAR_A
→ T_VarFile.vbs # [T_VarFile1]
テスト
VAR_A
.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_
関連
新規にエラーを発生させます。
未知のエラーを発生させます。
Finally ブロックに似た記述をする
[ テスト ]
関連
テスト
→ T_Err2 フォルダ
→ [T_Err2] Err2 オブジェクトのテスト
  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
関連
  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 ブロックの中が、複数行のとき
Trying は、毎行記述する必要があります。
エラーが発生しても、TryStart〜TryEnd の間で続きを実行する場合は、
Trying は不要です。
TryStart を使うと、エラーが発生した場所で、ブレークさせることができます。
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
参考
関連
エラーをキューにためる