(for Internet Explorer)
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'/>
テスト
一度も SkipToSection が呼ばれていないときは、グローバル変数 g_SkipSection が
Empty になっています。
サンプル: セクション番号を表示させない、かつ、実行のスキップをしない。
SkipToSection  Empty
NotSkipSection にブレークポイントを張ると、セクションごとにブレークします。
(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 フォルダ
Sub  SkipSection::End_()
参考
(src)
Function  NotSkipSection() as boolean
本関数を呼び出した場所をセクションの開始場所とします。
【引数】
返り値
SkipToSection で設定されたセクション以降かどうか
サンプル:
For Each i  As arr
  If NotSkipSection() Then
    DoTest
  End If
Next
本関数を呼び出すとセクション番号を+1します。
SkipToSection が呼ばれていたら、セクション番号を echo 出力します。
<Section num='5'/>
echo 出力の例:
廃止予定です。 SkipSection::Start 〜 End_ を使ってください
Sub  SetBreakAtSection( Num )
指定のセクションでブレークするようにします。
(src)
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 )
(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 オブジェクトのメソッド一覧
サンプル:
  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
が呼ばれることになり、終わりのない再帰呼び出しになり、メモリ不足(スタック不足)の
エラーになるでしょう。
(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 )
キーワード:
サンプル:
返り値
関数 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"
関連
なるべく、CallForEach を使わずに、For ループを使って、それぞれの要素に対して
処理してください。
(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" と同じ
テスト
→ T_EachCopy.vbs # [T_EachCopy1]
"folder\*" のように、StepPath の末尾が \* のときは、copy の第2引数に渡すコピー先に \* を
含まないようになります。 これにより、フォルダをコピーすることができます。
サンプル
Sub  CallForEach_move( FilePath, FromFolderPath, ToFolderPath )
に使えるファイルの移動です。
(src)
参考
CallForEach_del
Sub  CallForEach_del( FilePath, FolderPath )
に使えるファイルまたはフォルダの削除です。
  CallForEach1  GetRef("CallForEach_del"), Array( "a.txt", "folder\*" ), "folder"
上記コードは下記コードと同じ処理内容です。
  del  "folder\a.txt"
  del  "folder\folder\*"
サンプル
(src)
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 フォルダ
関連
→ schtasks /Create
StartTime の先頭を + にすると、現在の時刻からの差分を指定できます。
例) +1:30 … 1時間半後
Function  GetTaskList( EmptyParam as Empty )
タスク・スケジューラーに登録済みの、タスクを一覧します。
返り値は、タスクの集合である辞書型です。
タスクの集合の Key は タスク名、Item は1つのタスクを表す辞書型です。
1つのタスクを表す辞書型の Key は タスクの属性名、Item は属性の値です。
  Set  tasks = GetTaskList( Empty )
  Set  task = tasks.Item( "\Task1" )
  start  task.Item( "実行するタスク" )
サンプル
(src)
→ schtasks /Query
参考
→ 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
最初に更新するファイル
サンプル
Target.txt
source.txt
MakeRule を返す関数名
new_Target_txt_Rule
生成する
一般的なメイクファイル (vbslibではない)
ここでは、メイクファイルで指定された「構成」を図に表すときの記法を示します。
凡例
メイクファイルの名前。
ユーザー定義の委譲先オブジェクト。
デバッグモード
デバッグモードのパラメーター
定数の集まり
メイクを実行します。
メイクファイルのルールを登録します。
(src)
サンプル
Sub  MakeFileClass::AddRule( a_MakeRule as MakeRule )
メイクファイルのルールを登録します。
Sub  MakeFileClass::Make()
登録されているメイクファイルのルールに従って、メイクを実行します。
Dim  MakeFileClass::Name as string
メイクファイルの名前。
MakeFileClass::DebugMode に MakeFileClass::c.OutDebugXML を設定するときに
表示されます。
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
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 オブジェクトです。
サンプル
(src)
.Command によって作られるファイルのパス。
.Command を実行するのに必要となるファイルのパスの配列。
Target のタイムスタンプが、Sources より新しいときに実行する関数。
定数の集まり
委譲先となるユーザー定義オブジェクト。
MakeRule オブジェクトを生成したときのカレント・フォルダ。
メイクルールの種類。
優先度。 大きいほど優先する。
最もタイムスタンプが新しい Sources のファイルパス。
ターゲットよりタイムスタンプが新しいファイルパスの配列。
.Command によって作られるファイルのパス。
または、Command が最後まで完了したら更新するファイルのパス。
相対パスをしていするとき、基準フォルダは .CurrentDirectory。
Dim  MakeRule::Target as string
(src)
Dim  MakeRule::Sources as Array of string
.Command を実行するのに必要となるファイルのパスの配列。
または、Command を起動するときに更新するファイルのパス。
相対パスをしていするとき、基準フォルダは .CurrentDirectory。
(src)
Dim  MakeRule::Command as Sub( Delegate as variant, Rule as MakeRule )
Target のタイムスタンプが、Sources より新しいときに実行する関数。
GetRef で代入してください。
Delegate 引数は、MakeFileClass::Delegate
(src)
Dim  MakeRule::CurrentDirectory as string
MakeRule オブジェクトを生成したときのカレント・フォルダ。
(src)
MakeRule::Target や MakeRule::Sources に格納されている相対パスの基準パス。
MakeRule::Command の関数が呼ばれる直前で、カレント・フォルダがこの値になります。
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
Dim  MakeRule::Type_ as integer
メイクルールの種類。
(src)
Empty
c.Splitter
普通のメイクルール
ターゲットが存在しないときでも、コマンドを実行しないメイクルール
c は、MakeRule::c で参照できる MakeFileClassConst オブジェクトです。
→ オーダー調整用更新分離パス
参考