(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_sub.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
あるフォルダの中あるすべてのスクリプトの既定の設定
→ 正常終了時の動作
→ エラー発生時の動作
(src)
g_sh.Run cmd
'//=== Make command line
→ cmd.exe
WScript.Echo Err.Description
エラーメッセージを表示する
→ g_CommandPrompt
If g_CommandPrompt = 1 Then
WScript.Sleep 2000
← ▼ ▲
正常終了時の動作
main 関数からそのまま返ると、エラーレベルは 21 になります。
これは、wscipt.exe, cscript.exe は、スクリプトの内部でエラーが発生しても、
エラーレベルは 0 になっており、正常に終了したかどうかを区別するためです。
内部フロー
main
ResumePop
CallFinalizeInModules
If not IsEmpty( g_ExitCode ) Then WScript.Quit g_ExitCode
WScript.Quit 21
エラーレベルを指定するときは、WScript.Quit を呼び出すか、g_ExitCode に設定してください。
/SuccessRet - メイクファイルから vbslib を使ったスクリプトを呼び出すとき
コンパイルするときに使われることがあるメイクファイルは、起動したコマンドのエラーレベルが 0
ではないときは、エラーが発生したものとみなしますが、vbslib を使ったスクリプトが正常終了した
ときは、エラーレベルが 21 になるため、メイクファイルは処理を中断してしまいます。
正常終了したときに、エラーレベルが 0 になるようにするには、/SuccessRet:0
オプションを指定して vbs を起動してください。 ただし、ごくまれに vbslib がキャッチ
できないエラーが発生することがありますが、そのときは、エラーレベルが 0 になるため、
正常終了と区別することはできません。
cscript sampe.vbs /SuccessRet:0
テスト
→ [T_SuccessRet] /SuccessRet オプションによるエラーレベル
(src)
コマンドプロンプトを自動的に閉じるかどうか
関連
→ g_CommandPrompt
← ▼ ▲
エラー発生時の動作
main 関数の中でエラーが発生したら、標準化されたエラーメッセージを表示し、
適切なエラーレベルを、wscript.exe / cscript.exe を呼び出したプロセスへ返します。
wscipt.exe, cscript.exe は、スクリプトの内部でエラーが発生しても、エラーレベルは
0 になっています。 これではエラーが発生したかどうかがわからないので、vbs_inc
がエラーをキャッチして、エラー番号をエラーレベルにします。
文法エラーが発生したときは、エラーレベルが 1 になります。
(src)
→ エラーメッセージ文字列の標準書式(XML版)
関連
→ 終了、返り値（エラーレベル）を指定する (VBScript)
→ 正常終了時の動作
→ 警告して終了するには
→ CheckTestErrLevel
← ▼ ▲
バージョン判定、環境変数
処理フロー
VBScript global code
[vbs_inc_sub.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 ...
参考
→ CheckSettingFunctionExists
関連
ソース
→ vbs_inc_sub.vbs
← ▼ ▲
g_Vers
Dim g_Vers as Scripting.Dictionary
各種バージョン番号、または、設定に関する辞書です。
[ テスト ]
(src)
[ 親: バージョン判定 ]
関連
→ VarStack
値は文字列や数値やオブジェクトなどを格納できます。
SetVar
で設定される変数と同じ変数の領域（Dictionary）です。 （vbslib ver4 より）
VarStack
を使うことができます。
辞書のキーは、左にあるツリーの子ノードを参照してください。
例：
→ g_Vers("vbslib")
→ g_Vers("TextFileExtension")
← ▼ ▲
g_Vers("vbslib")
g_f = g_Vers.Item("vbslib")
If g_f >= 4.9 Then
g_Vers.Item("vbslib") = 4.9
g_vbslib_path = g_vbslib_folder + "vbslib\vbs_inc_sub.vbs"
ElseIf g_f >= 4.0 Then
g_vbslib_path = g_vbslib_folder + "vbslib400\vbs_inc_400.vbs"
ElseIf g_f >= 3.0 Then
g_vbslib_path = g_vbslib_folder + "vbslib300\vbs_inc_300.vbs"
ElseIf g_f >= 2.0 Then
g_vbslib_path = g_vbslib_folder + "vbs_inc_200.vbs"
Else
g_vbslib_path = g_vbslib_folder + "vbslib000\vbs_inc_000.vbs"
End If
判定サンプル
→ vbslib をバージョンアップする
バージョンの判定は、不等号を使ってください。
Sub SetupVbslibParameters()
'--- start of parameters for vbslib include -------------------------------
g_Vers("vbslib_ver") = 99.99
:
'--- end of parameters for vbslib include ---------------------------------
End Sub
0.0 … バージョン切り替えテスト用
2.0 … ver2.00 をそのまま使う （vbs_inc のデフォルト）
3.0 … ver3.00 を使う
4.0 … ver4.00 を使う
99.99 … 最新を使う
vbs_inc.vbs から vbslib をインクルード開始する時点で、実際に使用するバージョン
番号に変わります。 それまでは、メイン.vbs が要求する番号です。
上記のように決めていますが、実際の動きは下記の vbs_inc.vbs の内容によります。
設定サンプル
参考
テスト
→ T_Var.vbs # T_g_Vers_Stack
vbslib のバージョン番号です。
Dim g_Vers("vbslib") as dictionary
値の意味
vbs_inc.vbs の一部
← ▼ ▲
TextFileExtension (g_Vers)
→ T_Path.vbs
→ PC_setting_default.vbs
T_TextFileExtension
<< g_Vers
Dim g_Vers("TextFileExtension") as dictionary
テスト
ソース
テキスト・ファイルの拡張子をキーとした辞書。
大文字と小文字を区別しません。
setting フォルダー
の PC_setting_default.vbs などで設定します。
サンプル
If g_Vers("TextFileExtension").Exists( "xml" ) Then
extension = g_fs.GetExtensionName( path )
If g_Vers("TextFileExtension").Exists( extension ) Then
テキスト・ファイルの拡張子であるか判断する。
サンプル
辞書を作成する
Set g_Vers("TextFileExtension") = Dic_addFromArray( Empty, Array( _
"txt", _
"c", "h", "cpp", "hpp", "vbs", "js", "py", "rb", _
"ini", "log", _
"html", "htm", "xml", "svg" ), True )
Dic_addFromArray
関連
→ IsSameBinaryFile
→ IsSameTextFile
← ▼ ▲
NaturalDocsExtension (g_Vers)
Dim g_Vers("NaturalDocsExtension") as dictionary
NaturalDocs に入力できるファイルの拡張子をキーとした辞書。
MakeDocumentByNaturalDocs
で使われます。
この辞書が
g_Vers("TextFileExtension")
この辞書の使い方は、
と同じです。
setting フォルダー
にないときは、デフォルトの設定を使って処理されます。
← ▼ ▲
CutPropertyM (g_Vers)
Dim g_Vers("CutPropertyM") as string
→ Dic_addNewObject
関連
True なら Name プロパティを、False なら m_Name プロパティを使います。
g_Vers("CutPropertyM") = False
キーワード：
Name, m_Name
サンプル
ライブラリが提供するいくつかの関数の中で使われるオブジェクトに対して、Name プロパティを
参照するか、m_Name プロパティを参照するかを選べます。
デフォルトは、True です。
<< g_Vers
← ▼ ▲
ThisIsOldSpec
Sub ThisIsOldSpec()
現在実行している関数が、廃止されようとしている関数であることを警告します。
ファイル：
vbs_inc_sub.vbs
(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_sub.h
(src)
関連
→ ThisIsOldSpec
← ▼ ▲
SetNotErrorOfOldSpec
Sub SetNotErrorOfOldSpec()
ThisIsOldSpec が呼ばれても、エラーにしないように設定します。
ファイル：
vbs_inc_sub.h
関連
→ ThisIsOldSpec
(src)
← ▼ ▲
GetOSVersion
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
6.3 = Windows 8.1
10 = Windows 10
(src)
[ 親: バージョン判定 ]
関連
→ g_is64bitWindows
→ g_is64bitWSH
← ▼ ▲
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 を使って参照することができます。
set_ を実行すると、同じ名前のローカル環境の変数が削除されます。(2016-08-18より)
注意
環境変数はグローバル変数と同じなので、なるべく使わないでください。
下記のいずれかが使用できないか検討してください。
・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
→ AddIfNotExist
→ GetMainSetting 関数 (vbsool)
PATH 環境変数の追加
← ▼ ▲
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
LoadEnvVars envs, Empty
→ T_Var.vbs # T_LoadEnvVars
テスト
関連
→ VarStack
←
↓