(for Internet Explorer)
← ▼ ▲
↑
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
関連
← ▼ ▲
SetVarInBatchFile
Sub SetVarInBatchFile( Path as string, Symbol as string, Value as variant )
バッチ・ファイルの中で、環境変数を設定している部分の値を変更します。
【引数】
Path
Symbol
バッチ・ファイルのパス
環境変数の名前
Value
環境変数の値
テスト
→ T_VarFile.vbs
T_SetVarInBatchFile
ソース
→ vbslib.vbs
← ▼ ▲
Start_VBS_Lib_Settings
エディター等の設定を変更する
Sub Start_VBS_Lib_Settings()
Setting コマンド
を起動します。
→ vbslib.vbs
ソース
→ SettingTemplate.xml
← ▼ ▲
エラー処理 （Err2）
→ Raise
新規にエラーを発生させます。
→ エラー処理 （Err 版）
→ Error
未知のエラーを発生させます。
→ Err2 のコーディング例 (TryStart, TryEnd)
→ Err2 オブジェクト
→ FinObj クラス
Finally ブロックに似た記述をする
[ テスト ]
→ エラーコード
→ エラー発生時の動作
→ エラーメッセージ文字列の標準書式
→ Err2 の処理フロー
関連
テスト
→ T_Err2 フォルダ
→ [T_Err2] Err2 オブジェクトのテスト
→ Warning
警告を表示してプロセスを終了します。
→ エラーメッセージをチェックするテスト
→ エラーメッセージを表示して、エラー状態から復帰し、 続きを実行する
→ エラーの内容を変えて、再度エラーを発生させる
← ▼ ▲
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 [TODO]
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)
クリアしたエラーが発生した場所を調べるときは、クリアする代わりに
Err2::Raise してください。
← ▼ ▲
Err2 オブジェクト
Public Number ' Err.Number
Public num ' Err.Number
Public Description ' Err.Description (Error Message)
Public desc ' Err.Description (Error Message)
Public Source ' Err.Source
Public ErrID ' count of (num <> 0) in each first Copy after Clear
Public RaiseID ' count of (num <> 0) in Copy
Public BreakErrID ' as integer
Public BreakRaiseID ' as integer
(src)
Dim g_Err2 as Err2
メンバ関数
.Copy
.Raise
.OverRaise
.Clear
err オブジェクトの内容をコピーします。
同じ内容のエラーを再度発生させる。
エラーの内容を変えて、再度エラーを発生させる。
エラーをクリアする。
TryStart を呼び出すと、Err2 オブジェクトを取得できます。
また、g_Err2 グローバル変数からアクセスすることもできます。
メンバ変数
取得, g_Err2
→ Err オブジェクト
関連
→ Err2 のコーディング例 (TryStart, TryEnd)
テスト
→ T_Err2 フォルダ
→ [T_Err2] Err2 オブジェクトのテスト
他にもあります。
← ▼ ▲
Number (Err2)
num (Err2)
Property Get Err2::Number() as integer
エラーコード。
Property Get Err2::num() as integer
→ Err2 オブジェクト
エラー状態でなければ、0 になります。
← ▼ ▲
Description (Err2)
desc (Err2)
Property Get Err2::Description() as string
エラー・メッセージ。
Property Get Err2::desc() as string
→ Err2 オブジェクト
エラーメッセージを表示して、エラー状態から復帰し、 続きを実行する
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
echo_v "Error 0x"+ Hex( e.num ) +": "+ e.Description
e.Clear
End If
復帰する前にエラーが発生した場所でブレークするには、Clear の前に Raise
を追加してください。
echo_v "Error 0x"+ Hex( e.num ) +": "+ e.Description
e.Raise
e.Clear
Clear
Raise
← ▼ ▲
ErrStr (Err2)
Property Get Err2::ErrStr() as string
XML形式のエラーメッセージ。
エラーメッセージの例：
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
→ エラーメッセージ文字列のXML書式
関連
→ Err2 オブジェクト
← ▼ ▲
GetErrStr (Err2)
Function Err2::GetErrStr() as string
標準形式のエラーメッセージを返す。
(src)
エラーメッセージの例：
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
→ エラーメッセージ文字列の標準書式(XML版)
関連
廃止されました
→ ErrStr (Err2)
← ▼ ▲
DebugHint (Err2)
Property Get Err2::DebugHint() as string
エラーの内容とデバッグのヒント。
サンプル：
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then echo e.DebugHint : e.Clear
エラーメッセージの例：
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
→ Err2 オブジェクト
テスト
→ T_InputCommand.vbs # T_InputCommand_ForgetClear
← ▼ ▲
Value (Err2)
Function Err2::Value() as string
エラーの内容を文字列型で返します。
(src)
廃止されました
→ DebugHint (Err2)
← ▼ ▲
Copy (Err2)
Sub Err2::Copy( err as Err )
err オブジェクトの内容をコピーします。
(src)
← ▼ ▲
Raise (Err2)
Sub Err2::Raise()
同じ内容のエラーを再度発生させる。
(src)
← ▼ ▲
OverRaise (Err2)
Sub Err2::OverRaise( e_num as integer, e_desc as string )
エラーの内容を変えて、再度エラーを発生させる。
(src)
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
...
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
If Right( e.Description, 2 ) = "/>" Then
message = Left( e.Description, Len( e.Description ) - 2 ) + _
" msg2=""追加メッセージ。""/>"
e.OverRaise e.Number, message
Else
e.Raise
End If
End If
エラーが発生して、そのエラーメッセージが XML 形式なら、属性
msg2="追加メッセージ。" を追加します。
→ AppendErrorMessage
関連
← ▼ ▲
Clear (Err2)
Sub Err2::Clear()
エラーをクリアする。
エラー処理が終わったことを示すため、メンバ変数をリセットします。
num = 0 : Description = "" : RaiseID = 0
(src)
→ GetErrStr (Err2)
関連
エラーメッセージを取得する
→ CopyAndClear (Err2)
エラーの情報コピーしてクリアする
← ▼ ▲
CopyAndClear (Err2)
Sub Err2::CopyAndClear( out_e2 as Err2 )
エラーの情報を out_e2 にコピーしてから Err2 のエラーをクリアします。
→ エラーメッセージをチェックするテスト
参考
内部で Err2 オブジェクトが生成されて、out_e2 に格納されます。
テスト
→ T_Err2_Main.vbs # T_Err2_CopyAndClear
(src)
CopyAndClear した後でエラーが発生した場合、テストによるエラーであると判断して、
次のようなメッセージが表示されます。
'//エラーが発生した場所を知るには、CopyAndClear する前に Raise してください。
次のように Raise するコードを追加してください。
'//=== Error Handling Test
echo vbCRLF+"Next is Error Test"
If TryStart(e) Then On Error Resume Next
Test '// ここでエラーが発生する
If TryEnd Then On Error GoTo 0
e.Raise '// これを追加する
e.CopyAndClear e2 '//[out] e2
Assert e2.num <> 0 '// テストによるエラーが発生した場所
e.Raise
また、
/g_debug オプション
を設定していたら、設定を無効にしてください。
← ▼ ▲
EnqueueAndClear (Err2)
Sub Err2::EnqueueAndClear()
エラーの情報を Err2 の内部キューに入れてから Err2 のエラーをクリアします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
サンプル
Dim e ' as Err2
If TryStart(e) Then On Error Resume Next
Err.Raise 1,, "Error1"
If TryEnd Then On Error GoTo 0
e.EnqueueAndClear
If not IsEmpty(e) Then s = e.DequeueAll() : If s <> "" Then Raise 1, s
EnqueueAndClear
DequeueAll
(src)
← ▼ ▲
DequeueAll (Err2)
Function Err2::DequeueAll() as string
Err2 の内部キューの内容を返し、内部キューを空にします。
テスト
→ T_Err2_Main.vbs # T_Err2_EnqueueAndClear
エラーがキューに入っていないときは、"" を返します。
参考
→ EnqueueAndClear (Err2)
(src)
<ERROR msg="Error1"/>
<ERROR msg="Error2"/>
XML 書式のエラーメッセージを取得したいときは、ルート要素（タグ）を追加する
必要があるか検討してください。
サンプル返り値
← ▼ ▲
ErrID (Err2)
Dim Err2::ErrID as integer
エラーの通し番号。
エラーが発生して初めての TryEnd を通ったとき +1 されます。
Err2::Clear した後で、次のエラーが発生すると +1 されます。
→ Err2::BreakErrID
関連
← ▼ ▲
RaiseID (Err2)
Dim Err2::RaiseID as integer
エラーの通し番号。
エラーが発生して TryEnd を通るたびに +1 されます。
Err2::Clear で 0 に戻ります。
← ▼ ▲
BreakErrID (Err2)
Dim Err2::BreakErrID as integer
デバッガでブレークするエラーの通し番号。
エラーメッセージの前に g_debug を設定するように表示されます。 このメッセージに従って、
デバッガを起動すると、エラーが発生した場所でブレークします。
下記のファイルをテキストエディタで開いて次のように変数の値を修正すると、
デバッガに接続して問題がある場所で停止します。
"T_Err2_Clear.vbs"
------------------------------------------------------------------
g_debug = 2
------------------------------------------------------------------
<ERROR err_number='500' err_description='この変数は宣言されていません。'/>
→ Err2::ErrID
Visual Studio 2008 以降では、エラーが発生した場所からステップ実行することができます。
'--- start of parameters for vbslib include -------------------
g_debug = 1.5
エラーが発生したら Err2::ErrID が＋１されますが、Err2::ErrID = Err2::BreakErrID に
なったら、エラーによってデバッガでブレークします。 次に Err2:ErrID が＋１されるのは、
Err2::Clear した後にエラーが発生したときです。 それまでの Err.Raise では、Err2:ErrID
ではなく、Err2:RaiseID が＋１されます。
ただし、TryStart 〜 TryEnd の間ではないとき（On Error Next Resume を実行していない
とき）にエラーが発生したときは、Err2::BreakErrID の値にかかわらず、エラーが発生したら
必ずエラーブレークします。
サンプル：
→ Err2 のコーディング例 (TryStart, TryEnd)
参考
関連
g_Err2.BreakErrID を 1.5 とすると、Err2::ErrID が 1 のときのエラーをキャッチする
TryEnd または Trying でブレークします。
→ 処理フロー (Err2)
通常、
vbslib.vbs をインクルードしたら、g_Err2::BreakErrID に設定されます。
Pass (vbslib)
は、エラーではありませんが、内部で Err.Raise を呼び出しているため、
Err2:ErrID が＋１されます。
に設定してください。
g_debug
g_debug が小さすぎると、後で復帰するために問題の無いエラーでブレークします。
また、ブレークしたときはエラー復帰が行われなくなります。
とりあえずデバッガに接続したいときは、十分に大きい値を設定するか、0 に設定して
エラーメッセージから必要な値を確認してください。
← ▼ ▲
エラーコード
Dim E_Others : E_Others = 1
Dim E_TestPass : E_TestPass = 21
Dim E_TestSkip : E_TestSkip = 22
Dim E_TestFail : E_TestFail = 23
Dim E_BuildFail : E_BuildFail = &h80041004
Dim E_OutOfWritable : E_OutOfWritable = &h80041005
Dim E_NotFoundSymbol : E_NotFoundSymbol = &h80041006
Dim E_ProgRetNotZero : E_ProgRetNotZero = &h80041007
Dim E_Unexpected : E_Unexpected = &h80041008
Dim E_TimeOut : E_TimeOut = &h80041009
Dim E_WIN32_FILE_NOT_FOUND: E_WIN32_FILE_NOT_FOUND = &h80070002
Dim E_WIN32_DIRECTORY : E_WIN32_DIRECTORY = &h8007010B
Dim E_ProgTerminated : E_ProgTerminated = &hC0000005
Dim E_BadType : E_BadType = 13
Dim E_FileNotExist : E_FileNotExist = 53
Dim E_EndOfFile : E_EndOfFile = 62
Dim E_WriteAccessDenied : E_WriteAccessDenied = 70
Dim E_ReadAccessDenied : E_ReadAccessDenied = 70
Dim E_PathNotFound : E_PathNotFound = 76
Dim E_AlreadyExist : E_AlreadyExist = 58
(src)
関連
→ エラーメッセージ (VBS)
→ Windows エラーコード
← ▼ ▲
[E_NotClear] エラー処理の途中で終了しました。Err2.Clear または再 Raise してください
Err2::Clear
が呼ばれないで、スクリプトが終了しました。
Err2::Raise
または
TryStart
〜 TryEnd でエラー処理するときの最後に必要な
Err2::BreakErrID
を設定して、エラーが発生した場所でブレークして、コールスタックを参照
して、TryStart 〜 TryEnd のエラー処理に、Err2::Clear または Err2::Raise を記述してください。
<ERROR msg="Script finished before Err2.Clear or Raise the error"
jp="エラー処理の途中で終了しました。Err2.Clear または再 Raise してください"
err_symbol="E_NotClear" />
エラーメッセージ：
処理フロー
VBScript global code (メインvbs の vbslib include)
ResumePop
CallFinalizeInModules
(= g_FinalizeModules(i))
FinalizeModule (vbslib.vbs)
Err2.OnSuccessFinish
echo GetErrStr( num, Description )
0
← ▼ ▲
エラーメッセージのXML書式
<ERROR msg="Out of Diff"
src=
"C:\folder\file1.txt"
dst=
"C:\folder"
/>
<ERROR
ログを検索する時は、"<ERROR " で検索すると、すぐに見つかります。
エラーが発生したときは、"<WARNING " で検索すると問題を解決するヒント
が得られるかもしれません。
msg
自然言語のエラーメッセージ
src, dst など
値がパスのときは、タグジャンプができるように新しい行から値を書く。
→ GetErrStr
関連
XML を使って、エラー情報を構造化します。
もしエラー情報の一部を取得したいときは、エラーメッセージ（Err2.Description） を
LoadXML
に渡してください。 参考
→ Err2 オブジェクト
<ERROR msg="シンボルが見つかりません" path="SymbolA"/>
<WARNING msg="アップデートのチェックはスキップしました。"/>
←
↓