(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)
← ▼ ▲
call_vbs
Function call_vbs( path as string, func as string, param as variant )
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
【引数】
path
func
VBScript ファイルのパス
呼び出す関数の名前
path に環境変数を含めることができます。 （%var% 形式）
関数に渡すパラメータ
param
関数の返り値
返り値
現在のプロセスのまま、別の .vbs ファイルを呼び出します。
(src)
→ コールや include を相対パスで指定するときの注意
グローバル変数は、呼び出し先で宣言したものが、使えるようになります。
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
path に相対パスを指定するときは注意が必要です。
call_vbs "%ProgramFiles%\Movie Maker\moviemk.vbs", "FuncA", ""
サンプル：
呼び出し先の関数は、次の型にしてください。
Function FuncA( Param )
← ▼ ▲
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
が呼ばれることになり、終わりのない再帰呼び出しになり、メモリ不足（スタック不足）の
エラーになるでしょう。
← ▼ ▲
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]
"folder\*" のように、StepPath の末尾が \* のときは、copy の第2引数に渡すコピー先に \* を
含まないようになります。 これにより、フォルダをコピーすることができます。
サンプル
← ▼ ▲
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)
← ▼ ▲
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 フォルダ
テスト
(src)
make コマンドのように、ファイルのタイムスタンプを比較して、必要ならコマンドを実行します。
一般的なメイクファイルと、MakeFileClass との対応関係を示します。
Target.txt : Source1.txt Source2.txt
command
Target.txt が無いときか、Source1.txt または Source2.txt より古いときに、
command を実行します。 ただし、Source1.txt および Source2.txt に対する
ルールのコマンドを実行した後で実行します。
MakeFileClass では、次のように記述します。
Sub main()
Dim mk : Set mk = new MakeFileClass
mk.AddRule new_Target_txt_Rule()
mk.Make
End Sub
Function new_Target_txt_Rule()
Set new_Target_txt_Rule = new MakeRule : With new_Target_txt_Rule
.Sources = Array( "Source1.txt", "Source2.txt" )
.Target = "Target.txt"
Set .Command = GetRef("Target_txt_Command")
End With
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
Target.txt
Source1.txt
Source2.txt
Target_txt
→ ロールバック
MakeRule の source と target の関係
MakeRule で実行するコマンド
と
の対応関係
メイクファイルの図の記法 （参考）
File
最初に更新するファイル
MakeFileClass
MakeRule
サンプル
Target.txt
source.txt
MakeRule を返す関数名
new_Target_txt_Rule
生成する
一般的なメイクファイル （vbslibではない）
ここでは、メイクファイルで指定された「構成」を図に表すときの記法を示します。
凡例
← ▼ ▲
MakeFileClass
.Name
メイクファイルの名前。
.Delegate
ユーザー定義の委譲先オブジェクト。
.DebugMode
.DebugMode_Param1
デバッグモード
デバッグモードのパラメーター
.c
定数の集まり
.AddRule
.Make
メイクを実行します。
メイクファイルのルールを登録します。
(src)
サンプル
→ メイクファイル
← ▼ ▲
AddRule (MakeFileClass)
Sub MakeFileClass::AddRule( a_MakeRule as MakeRule )
メイクファイルのルールを登録します。
MakeRule
← ▼ ▲
Make (MakeFileClass)
Sub MakeFileClass::Make()
登録されているメイクファイルのルールに従って、メイクを実行します。
← ▼ ▲
Name (MakeFileClass)
Dim MakeFileClass::Name as string
メイクファイルの名前。
MakeFileClass::DebugMode に MakeFileClass::c.OutDebugXML を設定するときに
表示されます。
← ▼ ▲
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 = c.OutDebugXML のとき
メイクを実行する直前に、どのコマンドがあって、どのコマンドを実行するのかを
XML で表示します。 スクリプトは、pause によって一時停止します。
DebugMode = c.BreakBeforeCommand のとき
DebugMode_Param1 as string
ブレークする MakeRule::Target の一部
Empty = すべて Stop する
指定の MakeRule のコマンドを実行する直前で Stop します。
DebugMode = c.Watch のとき
それぞれの MakeRule のコマンドを実行する前と後で、指定の関数を呼び出します。
DebugMode_Param1 as Sub
呼び出す関数。GetRef を使ってください
Sub ( Delegate as variant, Rule as MakeRule )
呼び出す関数のパラメーターは、MakeRule::Command と同じです。
c は、MakeFileClass::c で参照できる MakeFileClassConst オブジェクトです。
← ▼ ▲
MakeRule
サンプル
→ メイクファイル
(src)
.Target
.Command によって作られるファイルのパス。
.Sources
.Command を実行するのに必要となるファイルのパスの配列。
.Command
Target のタイムスタンプが、Sources より新しいときに実行する関数。
.c
定数の集まり
.Delegate
.CurrentDirectory
.Type_
.Priority
.NewestSource
.AllNewSource
委譲先となるユーザー定義オブジェクト。
MakeRule オブジェクトを生成したときのカレント・フォルダ。
メイクルールの種類。
優先度。 大きいほど優先する。
最もタイムスタンプが新しい Sources のファイルパス。
ターゲットよりタイムスタンプが新しいファイルパスの配列。
← ▼ ▲
Target (MakeRule)
.Command によって作られるファイルのパス。
または、Command が最後まで完了したら更新するファイルのパス。
相対パスをしていするとき、基準フォルダは .CurrentDirectory。
Dim MakeRule::Target as string
(src)
← ▼ ▲
Sources (MakeRule)
Dim MakeRule::Sources as Array of string
.Command を実行するのに必要となるファイルのパスの配列。
または、Command を起動するときに更新するファイルのパス。
相対パスをしていするとき、基準フォルダは .CurrentDirectory。
(src)
← ▼ ▲
Command (MakeRule)
Dim MakeRule::Command as Sub( Delegate as variant, Rule as MakeRule )
Target のタイムスタンプが、Sources より新しいときに実行する関数。
GetRef で代入してください。
Delegate 引数は、MakeFileClass::Delegate
(src)
← ▼ ▲
CurrentDirectory (MakeRule)
Dim MakeRule::CurrentDirectory as string
MakeRule オブジェクトを生成したときのカレント・フォルダ。
(src)
MakeRule::Target や MakeRule::Sources に格納されている相対パスの基準パス。
MakeRule::Command の関数が呼ばれる直前で、カレント・フォルダがこの値になります。
← ▼ ▲
Delegate (MakeRule)
Dim MakeRule::Delegate as variant
委譲先となるユーザー定義オブジェクト。
(src)
MakeRule クラスのオブジェクトを生成するときにユーザー定義オブジェクトを Delegate に格納しておくと、
MakeRule::Command で呼ばれる関数の中で、第2引数である MakeRule オブジェクトの
Delegate からユーザー定義オブジェクトを、参照することができるようになります。
Function new_Target_txt_Rule()
Set new_Target_txt_Rule = new MakeRule : With new_Target_txt_Rule
.Sources = Array( "Source1.txt", "Source2.txt" )
.Target = "Target.txt"
.Delegate = "ABC"
Set .Command = GetRef("Target_txt_Command")
End With
End Function
Sub Target_txt_Command( a_MakeFile, a_MakeRule )
echo a_MakeRule.Delegate
End Sub
Delegate
Delegate
← ▼ ▲
Type_ (MakeRule)
Dim MakeRule::Type_ as integer
メイクルールの種類。
(src)
Empty
c.Splitter
普通のメイクルール
ターゲットが存在しないときでも、コマンドを実行しないメイクルール
c は、MakeRule::c で参照できる MakeFileClassConst オブジェクトです。
→ オーダー調整用更新分離パス
参考
←
↓