(for Internet Explorer)
← ▼ ▲
↑
SkipToSection
SkipToSection Array( 5, 2 )
サンプル： セクション番号 5,2 から実行する（ 5,1 より前は実行をスキップする。）
Sub SkipToSection( Num as integer )
指定した番号のセクションより前のセクションをスキップするように設定します。
【引数】
Num
次に実行するセクション番号
通常、メイン関数から呼び出します。
はじめは 0 を指定して、セクション番号を echo 出力させます。
次に、スキップしたいセクションを調べて、次に実行したいセクション番号を指定します。
SkipToSection 5
サンプル： セクション番号 5 から実行する（ 5 より前は実行をスキップする。）
(src)
関連
セクション番号は、下記のように echo 出力されます。 SkipToSection を一度も呼んで
いないときや、スキップ中は出力されません。
<Section num='4'/>
テスト
→ T_SkipToSection フォルダ
一度も SkipToSection が呼ばれていないときは、グローバル変数 g_SkipSection が
Empty になっています。
サンプル： セクション番号を表示させない、かつ、実行のスキップをしない。
SkipToSection Empty
NotSkipSection にブレークポイントを張ると、セクションごとにブレークします。
→ SkipSection::Start
→ SkipSection::End_
→ SetBreakAtSection
← ▼ ▲
SkipSection::Start
(src)
Function SkipSection::Start() as boolean
Dim section : Set section = new SkipSection
If section.Start() Then '// section 1
:
section.End_
End If
If section.Start() Then '// section 2
If exist( "out.txt" ) Then '// 条件によって、しないことがある処理は、section の中へ
:
End If
section.End_
End If
サンプル：
本関数を呼び出した場所をセクションの開始場所とします。
テスト
→ T_SkipToSection フォルダ
← ▼ ▲
SkipSection::End_
Sub SkipSection::End_()
参考
→ SkipSection::Start
← ▼ ▲
NotSkipSection
(src)
Function NotSkipSection() as boolean
本関数を呼び出した場所をセクションの開始場所とします。
【引数】
返り値
SkipToSection で設定されたセクション以降かどうか
サンプル：
For Each i As arr
If NotSkipSection() Then
DoTest
End If
Next
本関数を呼び出すとセクション番号を＋１します。
SkipToSection が呼ばれていたら、セクション番号を echo 出力します。
<Section num='5'/>
echo 出力の例：
→ SkipSection::Start
廃止予定です。 SkipSection::Start 〜 End_ を使ってください
← ▼ ▲
SetBreakAtSection
Sub SetBreakAtSection( Num )
指定のセクションでブレークするようにします。
(src)
← ▼ ▲
GetSkipSectionGlobal
Function GetSkipSectionGlobal() as SkipSectionGlobal
セクションを管理するオブジェクトを返します。
【引数】
返り値
セクションを管理するオブジェクト
ソース
→ vbslib.vbs
GetSkipSectionGlobal 関数
SkipSectionGlobal クラス
→ vbslib.vbs
SkipSectionGlobal クラス
→ OnStart
セクションを開始する直前でコールバックする関数。
← ▼ ▲
OnStart (SkipSectionGlobal)
Sub SkipSectionGlobal::OnStart( CallbackObject as variant )
セクションを開始する直前でコールバックする関数。
【引数】
CallbackObject
GetSkipSectionGlobal().CallbackObject
Sub Main( Opt, AppKey )
Set ss = GetSkipSectionGlobal()
Set ss.OnStart = GetRef("CheckOnCallback")
Set ss.CallbackObject = Nothing
RunTestPrompt AppKey.NewWritable( "." )
End Sub
Sub CheckOnCallback( Argument1 )
echo "CheckOnCallback"
End Sub
サンプル
関連
→ Start (SectionTree)
セクションの開始を指定します。
← ▼ ▲
call_vbs
Function call_vbs( path as string, func as string, param as variant )
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
【引数】
path
func
VBScript ファイルのパス
呼び出す関数の名前
path に環境変数を含めることができます。 （%var% 形式）
関数に渡すパラメータ
param
関数の返り値
返り値
現在のプロセスのまま、別の .vbs ファイルを呼び出します。
(src)
グローバル変数は、呼び出し先で宣言したものが、使えるようになります。
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
path に相対パスを指定するときは注意が必要です。
call_vbs "%ProgramFiles%\Movie Maker\moviemk.vbs", "FuncA", ""
サンプル：
呼び出し先の関数は、次の型にしてください。
Function FuncA( Param )
(src)
g_SrcPath
は、で、グローバル領域を実行しているときだけでなく、呼び出す
関数を実行しているときも、path 引数に指定したパスのフル・パスが入ります。
→ g_start_in_path
← ▼ ▲
FuncRedir_add
(src)
ModuleC_pre.vbs
Dim g_FuncA : FuncRedir_add g_FuncA, "FuncA"
関数コールをリダイレクト（横取り）します。
ModuleC.vbs
Sub FuncA( Param1 )
If GetVar( "FuncA_Redir" ) = "Over" Then
echo "overrided"
Else
g_FuncA.CallSub1 Param1
End If
End Sub
FuncA
FuncA
FuncA
FuncA
FuncA
Sub FuncRedir_add( out_Redir as FuncRedir, Name as string )
上書きする前の関数を呼び出さないときは、FuncRedir_add を呼び出す必要はありません。
FuncRedir_add の第1引数に指定して取得したオブジェクト使って、上書きする前の関数を
呼び出します。
FuncRedir オブジェクトのメソッド一覧
Sub FuncRedir::CallSub0()
Sub FuncRedir::CallSub1( Param1 )
Sub FuncRedir::CallSub2( Param1, Param2 )
Sub FuncRedir::CallSub3( Param1, Param2, Param3 )
Sub FuncRedir::CallSub4( Param1, Param2, Param3, Param4 )
Function FuncRedir::CallFunction0()
Function FuncRedir::CallFunction1( Param1 )
Function FuncRedir::CallFunction2( Param1, Param2 )
Function FuncRedir::CallFunction3( Param1, Param2, Param3 )
Function FuncRedir::CallFunction4( Param1, Param2, Param3, Param4 )
include "ModuleC_pre.vbs"
include "ModuleC.vbs"
上書きする前の関数を呼び出します。
テスト
→ T_FuncRedir.vbs
→ T_NameAdd_vbslib フォルダ
参考
→ マクロ・リダイレクト
関連
→ バージョン判定、環境変数
→ バージョン判定、環境変数
Sub FuncX()
Dim v_:Set v_= new VarStack
SetVar "FuncA_Redir", "Over"
FuncA
End Sub
ModuleX.vbs
リダイレクト先の関数が定義してあるスクリプト・ファイルと、別のファイルから FuncRedir_add
を呼び出してください。
たとえば、下記の ModuleC.vbs と ModuleC_pre.vbs のように分けてください。
そうしないと、リダイレクトする前の関数が上書きされた後で、FuncRedir_add が呼ばれる
ことになり、終わりのない再帰呼び出しになり、メモリ不足（スタック不足）のエラーになる
でしょう。
サンプル
Main.vbs
FuncRedir_add を呼び出すためのファイル
リダイレクト先
FuncA の呼び出し元
FuncRedir オブジェクト
【引数】
out_Redir
Name
（出力）
リダイレクトされる関数の名前
FuncA 関数の定義をリダイレクトし、環境変数 FuncA_Redir の値によって、リダイレクト元か
リダイレクト先かのどちらかの FuncA 関数を呼び出すかを選べるようにします。
← ▼ ▲
CallForEach
(src)
Function CallForEach0( Func as Function, Collection as array or variant )
Collection のそれぞれの要素を引数に渡して、関数 Func を複数回呼び出します。
【引数】
Func
Collection
呼び出す関数（GetRef使用）
配列、または単純変数、または Empty
関数に渡すパラメータ
Param1
Function CallForEach1( Func, Collection, Param1 as variant )
Function CallForEach2( Func, Collection, Param1 as variant, Param2 as variant )
キーワード：
CallForEach0, CallForEach1, CallForEach2, CallForEach3, CallForEach4
サンプル：
返り値
関数 Func の返り値（Collection が単純変数のときのみ）
CallForEach2 GetRef("CallForEach_copy"), Array( "a.txt", "b.txt" ), "src", "dst"
上記コードは下記コードと同じ処理内容です。
CallForEach_copy "a.txt", "src", "dst"
CallForEach_copy "b.txt", "src", "dst"
関連
→ EventResponders : イベント応答 (vbsool)
なるべく、CallForEach を使わずに、For ループを使って、それぞれの要素に対して
処理してください。
← ▼ ▲
CallForEach_copy
(src)
Sub CallForEach_copy( StepPath as string, FromFolderPath as string, ToFolderPath as string )
に使えるファイルコピーです。
【引数】
StepPath
FromFolderPath
ファイルへの相対パス。 基準は FromFolderPath と ToFolderPath
コピー元のフォルダ
コピー先のフォルダ
ToFolderPath
CallForEach2 GetRef("CallForEach_copy"), Array( "a.txt", "folder\*" ), "src", "dst"
上記コードは下記コードと同じ処理内容です。
copy "src\a.txt", "dst"
copy "src\folder\*", "dst\folder" '// copy "src\folder", "dst" と同じ
CallForEach
テスト
→ T_EachCopy.vbs # [T_EachCopy1]
フォルダーをコピーするとき、パスの末尾に "\*" があってもなくても構いません。
サンプル
ワイルドカードを使っても、サブ・フォルダーはコピーしません。
ExpandWildcard
と組み合わせて
ください。
Set c = g_VBS_Lib
ExpandWildcard "src\*.doc", c.File or c.SubFolder, folder, step_paths
CallForEach2 GetRef("CallForEach_copy"), step_paths, "src", "dst"
→ CopyFunction 型、コピー関数型
関連
← ▼ ▲
CallForEach_move
Sub CallForEach_move( FilePath, FromFolderPath, ToFolderPath )
に使えるファイルの移動です。
CallForEach
(src)
参考
→ CallForEach_copy
← ▼ ▲
CallForEach_del
Sub CallForEach_del( FilePath, FolderPath )
に使えるファイルまたはフォルダの削除です。
CallForEach
CallForEach1 GetRef("CallForEach_del"), Array( "a.txt", "folder\*" ), "folder"
上記コードは下記コードと同じ処理内容です。
del "folder\a.txt"
del "folder\folder\*"
サンプル
(src)
← ▼ ▲
Transpose
copy t_source, t_destination
t_source = "C:\From.txt"
t_destination = "C:\To.txt"
サンプル
文を実行する順番を入れ替えます。
たとえば、関数の引数の代入（詳細）を後で書くほうが可読性が上がるときに使います。
Transpose は、順番の入れ替えを示すだけで、何もしません。
上記のコードは、下記のコードと同じ処理を行います。
source = "C:\From.txt"
destination = "C:\To.txt"
copy source, destination
前半と後半（Transpose : Else の前後）をつなぐ変数の名前の先頭は、
t_ から始めるコーディング ルールを推奨します。
上記のコードは、説明のために後半が短いため、変数を介さないほうが読みやすいですが、
一般に後半が長いときは読みやすくなります。
Transpose : For i=0 To 1 : If i=1 Then
Else ' Transpose
Transpose : End If : Next
ソース
→ vbslib.vbs
← ▼ ▲
SetTaskStartTime
Sub SetTaskStartTime( TaskName as string, StartTime as string )
タスク・スケジューラーに登録済みの、指定のタスクを開始する時刻を変更します。
echo "タスクの開始時間を再設定します。"
Dim name : name = input( "タスク名>" )
echo "例： 13:00 ... 今が午前10時なら、今日の午後1時に実行する"
echo "例： 1:00 ... 今が午前10時なら、明日の午前1時に実行する"
echo "例： +1:00 ... 今から1時間後に実行する"
Dim after : after = input( "いつ実行を開始しますか>" )
SetTaskStartTime name, after
SetTaskStartTime
サンプル
(src)
→ samples/TaskScheduler フォルダ
→ GetTaskList
関連
→ schtasks /Create
StartTime の先頭を + にすると、現在の時刻からの差分を指定できます。
例） +1:30 … １時間半後
← ▼ ▲
GetTaskList
Function GetTaskList( EmptyParam as Empty )
タスク・スケジューラーに登録済みの、タスクを一覧します。
返り値は、タスクの集合である辞書型です。
タスクの集合の Key は タスク名、Item は１つのタスクを表す辞書型です。
１つのタスクを表す辞書型の Key は タスクの属性名、Item は属性の値です。
Set tasks = GetTaskList( Empty )
Set task = tasks.Item( "\Task1" )
start task.Item( "実行するタスク" )
サンプル
(src)
→ schtasks /Query
参考
← ▼ ▲
MakeFileClass （メイクファイル）
→ Makefile
参考
→ T_MakeRule フォルダ
テスト
make コマンドのように、ファイルのタイムスタンプを比較して、必要ならコマンドを実行します。
一般的なメイクファイルと、MakeFileClass との対応関係を示します。
Target.txt : Source1.txt Source2.txt
command
Target.txt が無いときか、Source1.txt または Source2.txt より古いときに、
command を実行します。 ただし、Source1.txt および Source2.txt に対する
ルールのコマンドを実行した後で実行します。
MakeFileClass では、次のように記述します。
Sub Main()
Set mk = new MakeFileClass
mk.AddRule new_Target_txt_Rule()
mk.Make
End Sub
Function new_Target_txt_Rule()
Set o = new MakeRule
o.Sources = Array( "Source1.txt", "Source2.txt" )
o.Target = "Target.txt"
Set o.Command = GetRef("Target_txt_Command")
Set new_Target_txt_Rule = o
End Function
Sub Target_txt_Command( Param, Rule )
copy_ren Rule.Sources(0), Rule.Target
End Sub
Target_txt
Target_txt
Target_txt
Target_txt
Target.txt
Source1.txt
Source2.txt
Target_txt
→ ロールバック
MakeRule の source と target の関係
MakeRule で実行するコマンド
メイクファイルの図の記法例 （参考）
File
最初に更新するファイル
MakeFileClass
MakeRule
サンプル
Target.txt
Source.txt
MakeRule を返す関数名
by new_Target_txt_Rule
生成する
一般的なメイクファイル （vbslibではない）
ここでは、メイクファイルで指定された「構成」を図に表すときの記法を示します。
凡例
Command
→ vbslib.vbs
ソース
ワイルドカードを指定
すれば、
暗黙ルール
を作ることができます。
DebugMode
を設定して詳細な情報を確認してください。
うまく動作しないときは、
→ データ構造 (MakeFileClass)
→ OpenForMakeRuleOfRevisionFolder
関連
← ▼ ▲
MakeFileClass
.Name
メイクファイルの名前。
.Delegate
ユーザー定義の委譲先オブジェクト。
.DebugMode
.DebugMode_Param1
デバッグモード
デバッグモードのパラメーター
.c
定数の集まり
.AddRule
.Make
メイクを実行します。
メイクファイルのルールを登録します。
(src)
サンプル
→ メイクファイル
.Variables
ユーザー定義変数の集まり。
<< MakeFileClass （メイクファイル）
← ▼ ▲
AddRule (MakeFileClass)
Sub MakeFileClass::AddRule( a_MakeRule as MakeRule )
メイクファイルのルールを登録します。
MakeRule
a_MakeRule 引数に配列を指定することもできます。
← ▼ ▲
Make (MakeFileClass)
Sub MakeFileClass::Make()
登録されているメイクファイルのルールに従って、メイクを実行します。
← ▼ ▲
Name (MakeFileClass)
Dim MakeFileClass::Name as string
メイクファイルの名前。
MakeFileClass::DebugMode に MakeFileClass::c.OutDebugXML を設定するときに
表示されます。
← ▼ ▲
Variables (MakeFileClass)
Dim MakeFileClass::Variables as LazyDictionaryClass
ユーザー定義変数の集まり。
LazyDictionaryClass
MakeFileClass を生成した時点で、LazyDictionaryClass のオブジェクトは生成されています。
Variables が指しているオブジェクトは、
MakeRule::Variables
でも参照できます。
MakeRule::Variables で自動的に設定される変数と同じ名前の変数をユーザーが定義すると
上書きされてしまうので注意してください。
← ▼ ▲
Delegate (MakeFileClass)
Dim MakeFileClass::Delegate as variant
委譲先となるユーザー定義オブジェクト。
Sub main()
Dim mk : Set mk = new MakeFileClass
mk.AddRule new_Target_txt_Rule()
mk.Delegate = "ABC"
mk.Make
End Sub
Sub Target_txt_Command( a_MakeFile, a_MakeRule )
echo a_MakeFile.Delegate
End Sub
MakeFileClass クラスのオブジェクトを生成するときにユーザ定義オブジェクトを Delegate に格納しておくと、
MakeRule::Command で呼ばれる関数の中で、第1引数である MakeFileClass オブジェクトの
Delegate からユーザ定義オブジェクトを、参照することができるようになります。
Delegate
Delegate
← ▼ ▲
DebugMode (MakeFileClass)
Dim MakeFileClass::DebugMode as integer
Dim MakeFileClass::DebugMode_Param1 as variant
メイクファイルのデバッグモード
DebugMode = MakeFileClass::c.OutDebugXML のとき
メイクを実行する直前に、どのコマンドがあって、どのコマンドを実行するのかを
XML で表示します。 スクリプトは、pause によって一時停止します。
DebugMode = MakeFileClass::c.BreakBeforeCommand のとき
DebugMode_Param1 as string
ブレークする MakeRule::Target の一部
Empty = すべて Stop する
指定の MakeRule のコマンドを実行する直前で Stop します。
DebugMode = MakeFileClass::c.Watch のとき
それぞれの MakeRule のコマンドを実行する前と後で、指定の関数を呼び出します。
DebugMode_Param1 as Sub
呼び出す関数。GetRef を使ってください
Sub ( Delegate as variant, Rule as MakeRule )
呼び出す関数のパラメーターは、MakeRule::Command と同じです。
c は、MakeFileClass::c で参照できる MakeFileClassConst オブジェクトです。
←
↓