(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  GetSkipSectionGlobal() as SkipSectionGlobal
セクションを管理するオブジェクトを返します。
【引数】
返り値
セクションを管理するオブジェクト
ソース
→ vbslib.vbs
GetSkipSectionGlobal 関数
SkipSectionGlobal クラス
→ vbslib.vbs
セクションを開始する直前でコールバックする関数。
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
サンプル
関連
セクションの開始を指定します。
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)
は、で、グローバル領域を実行しているときだけでなく、呼び出す
関数を実行しているときも、path 引数に指定したパスのフル・パスが入ります。
(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引数に指定して取得したオブジェクト使って、上書きする前の関数を
呼び出します。
  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 の呼び出し元
【引数】
out_Redir
Name
(出力)
リダイレクトされる関数の名前
FuncA 関数の定義をリダイレクトし、環境変数 FuncA_Redir の値によって、リダイレクト元か
リダイレクト先かのどちらかの FuncA 関数を呼び出すかを選べるようにします。
(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]
フォルダーをコピーするとき、パスの末尾に "\*" があってもなくても構いません。
サンプル
ワイルドカードを使っても、サブ・フォルダーはコピーしません。
と組み合わせて
ください。
  Set c = g_VBS_Lib

  ExpandWildcard  "src\*.doc", c.File or c.SubFolder, folder, step_paths
  CallForEach2  GetRef("CallForEach_copy"), step_paths, "src", "dst"
関連
Sub  CallForEach_move( FilePath, FromFolderPath, ToFolderPath )
に使えるファイルの移動です。
(src)
参考
Sub  CallForEach_del( FilePath, FolderPath )
に使えるファイルまたはフォルダの削除です。
    CallForEach1  GetRef("CallForEach_del"), Array( "a.txt", "folder\*" ), "folder"
上記コードは下記コードと同じ処理内容です。
    del  "folder\a.txt"
    del  "folder\folder\*"
サンプル
(src)
                                               
    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
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 フォルダ
テスト
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
最初に更新するファイル
サンプル
Target.txt
Source.txt
MakeRule を返す関数名
by new_Target_txt_Rule
生成する
一般的なメイクファイル (vbslibではない)
ここでは、メイクファイルで指定された「構成」を図に表すときの記法を示します。
凡例
Command
→ vbslib.vbs
ソース
すれば、
暗黙ルール
を作ることができます。
を設定して詳細な情報を確認してください。
うまく動作しないときは、
関連
→ CheckEnglishOnly_src\Test.vbs
ソースに更新があったときだけコピーする
メイクファイルの名前。
ユーザー定義の委譲先オブジェクト。
デバッグモード
デバッグモードのパラメーター
定数の集まり
メイクを実行します。
メイクファイルのルールを登録します。
(src)
サンプル
ユーザー定義変数の集まり。
Sub  MakeFileClass::AddRule( a_MakeRule as MakeRule )
メイクファイルのルールを登録します。
a_MakeRule 引数に配列を指定することもできます。
Sub  MakeFileClass::Make()
登録されているメイクファイルのルールに従って、メイクを実行します。
Dim  MakeFileClass::Name as string
メイクファイルの名前。
MakeFileClass::DebugMode に MakeFileClass::c.OutDebugXML を設定するときに
表示されます。
Dim  MakeFileClass::Variables as LazyDictionaryClass
ユーザー定義変数の集まり。
MakeFileClass を生成した時点で、LazyDictionaryClass のオブジェクトは生成されています。
Variables が指しているオブジェクトは、
でも参照できます。
MakeRule::Variables で自動的に設定される変数と同じ名前の変数をユーザーが定義すると
上書きされてしまうので注意してください。
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 = 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 オブジェクトです。