←
▼
▲
i = 1
Do
s = MeltCmdLine( cmdline, i )
If i = 0 Then Exit Do
Loop
サンプル
コマンドラインの1項目を取り出し、通常の文字列に戻す。
Function MeltCmdLine( Line as string, in_out_Start as integer ) as string
【引数】
CmdLine
in_out_Start
コマンドラインの内容
(入力) 取り出しを開始する文字の位置、(出力)次に取り出す〜
返り値
取り出したコマンドラインの1項目
次の項目が無いときは、in_out_Start=0 になります。
(src)
→ T_CmdLine.vbs # [T_MeltCmdLine]
テスト
関連
サンプルデータ
sample.exe param1 "param 2"
次の順番で返ります
sample.exe
param1
param 2
←
▼
▲
(src)
Function ArrayFromBashCmdLine( CmdLine as string ) as array of string
bash シェルのコマンドラインの1行を解析して、それぞれの項目を配列に格納する。
の bash 版です。
→ T_CmdLine.vbs # [T_ArrayFromBashCmdLine]
テスト
←
▼
▲
の bash 版です。
→ T_CmdLine.vbs # [T_ArrayFromBashCmdLine]
テスト
(src)
bash シェルのコマンドラインの1項目を取り出し、通常の文字列に戻す。
Function MeltBashCmdLine( Line as string, in_out_Start as integer ) as string
←
▼
▲
関連
コマンドラインが入った文字列を解析して、それぞれの引数を配列などに格納する。
Function ParseCmdLine( CmdLine as string ) as CmdLineArgs
Set args = ParseCmdLine( line )
【引数】
CmdLine
返り値
コマンドライン
引数にアクセスするオブジェクト
サンプル
サンプルデータ
sample.exe param1 "param 2"
次のように分割されます
sample.exe
param1
param 2
未対応
現在のスクリプトを起動したときのコマンドラインではない、コマンドラインの内容に
アクセスしやすくします。
←
▼
▲
取得
メンバー
に準拠
未対応
←
▼
▲
Function CmdLineFromStr( Str as string or array ) as string
文字列、または文字列の配列から、コマンドラインを作成します。
【引数】
Str
文字列、または文字列の配列
返り値
コマンドライン
ファイル:
vbslib.vbs
サンプル
cmd = CmdLineFromStr( Array( "findstr", "/C:""quot and space""", "*" ) )
Assert cmd = "findstr ""/C:\""quot and space\"""" *"
→ T_CmdLine.vbs # [T_CmdLineFromStr]
テスト
(src)
←
▼
▲
Function GetCmdLine() as string
現在のスクリプトを起動したときのコマンドラインを返します。
(src)
実行ファイル名と、パラメーターの両方を含みます。
関連
←
▼
▲
Function ArgumentExist( Name as string ) as boolean
【引数】
Name
コマンドライン・オプション名
返り値
オプションが指定されているかどうか
指定した名前のコマンドライン・オプションが指定されているかどうかを返します。
/Opt1:1 ではなく /Opt1 では、WScript.Arguments.Named.Item("Opt1") は
Empty を返し、/Opt1 を指定しなかったときと、区別ができません。
ArgumentExist は、区別ができます。
Name の大文字小文字は区別します。
(src)
WScript.Arguments.Named.Item("Opt1")
If ArgumentExist( "Opt1" ) Then ...
サンプル:
→ GetArgvNamed (clib)
関連
WScript.Arguments.Unnamed(0)
→ GetCommandLineExist (clib)
←
▼
▲
(src)
Function GetCommandLineOptionName( OneParameter as string ) as string
オプション名+値から、オプション名を返します。
【引数】
OneParameter
返り値
オプション名+値
オプション名
サンプル:
name = GetCommandLineOptionName( "/OptionA:12" )
'// name = "OptionA"
→ T_CmdLine.vbs # [T_CommandLineOption]
テスト
←
▼
▲
(src)
Function GetCommandLineOptionValue( OneParameter as string ) as string
オプション名+値から、値を返します。
【引数】
OneParameter
返り値
オプション名+値
値
サンプル:
value = GetCommandLineOptionValue( "/OptionA:12" )
'// value = "12"
value = GetCommandLineOptionValue( "/OptionA:""C:\Program Files""" )
'// value = "C:\Program Files"
→ T_CmdLine.vbs # [T_CommandLineOption]
テスト
←
▼
▲
コマンドラインの1行にある、オプションの値を変更します。
Function ModifyCmdLineOpt( CmdLine as string,
OptionName as string, NewOptionNameAndParam as string ) as string
【引数】
CmdLine
NewOptionNameAndParam
コマンドラインの1行
オプション名と、変更後の値。 削除=Empty
OptionName
オプション名
(出力) 変更後のコマンドラインの1行
返り値
new_cmdline = ModifyCmdLineOpt( "-Opt1 -Opt2:ValueA Value1", "-Opt2", "-Opt2:ValueB" )
Assert new_cmdline = "-Opt1 -Opt2:ValueB Value1"
サンプル
new_cmdline = ModifyCmdLineOpt( "-Opt1 -Opt2:ValueA Value1", "-Opt2", Empty )
Assert new_cmdline = "-Opt1 Value1"
new_cmdline = ModifyCmdLineOpt( "-Opt1 Value1", "-Opt2", "-Opt2:ValueB" )
Assert new_cmdline = "-Opt1 -Opt2:ValueB Value1"
-Opt2 オプションの値を変更する
-Opt2 オプションを無くす
-Opt2 オプションがなければ追加する
-Opt2 オプションと、その値の間が空白のときは、OptionNmae 引数の末尾に ":"(コロン)を付ける
new_cmdline = ModifyCmdLineOpt( "-Opt1 -Opt2 ValueA Value1", "-Opt2:", "-Opt2 ValueB" )
Assert new_cmdline = "-Opt1 -Opt2 ValueB Value1"
複数指定できる -o オプションを追加するときは、OptionNmae 引数の末尾に "::"(コロン×2)を付ける
new_cmdline = ModifyCmdLineOpt( "-o ValueA -o ValueB Value1", "-o::", "-o NewValue" )
Assert new_cmdline="-o NewValue -o ValueA -o ValueB Value1"
new_cmdline = ModifyCmdLineOpt( "-o ValueA -o ValueB Value1", "-o::ValueB", "-o NewValue" )
Assert new_cmdline = "-o ValueA -o NewValue Value1"
複数指定できる -o オプションを修正/削除するときは、OptionNmae 引数の末尾に "::"(コロン×2)
と値を付ける
new_cmdline = ModifyCmdLineOpt( "-o ValueA -o ValueB Value1", "-o::ValueB", Empty )
Assert new_cmdline = "-o ValueA Value1"
(src)
→ T_CmdLine.vbs # [T_ModifyCmdLineOpt]
テスト
←
▼
▲
Sub include( path as string )
path に環境変数を含めることができます。 (%var% 形式)
クラス定義や関数定義が入った VBS ファイルのパスを指定します。
VBS ファイルで定義されたグローバル変数や関数は、include を呼び出した
関数の外から参照することはできません。
include "%ProgramFiles%\Movie Maker\moviemk.vbs"
サンプル:
関数定義やクラス定義が入った VBSファイルをインクルードします。
(src)
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
→ コールや include を相対パスで指定するときの注意
path に相対パスを指定するときは注意が必要です。
二重定義エラーが出るときの対策
インクルードする vbs ファイルに、すでに定義されているクラスの
定義があると、エラーになります。クラスは、インスタンスに影響する
ため上書きできません。 (関数は上書きできます)
二重にインクルードしないようにするか、クラス定義だけ1回だけ
インクルードするファイルに分割してください。
Dim g_TestClass : If IsEmpty( g_TestClass ) Then _
include "TestClass.vbs" : g_TestClass = True
サンプル: 1回だけインクルードする
フォルダのパスを指定したり、ワイルドカードを指定すると、サブフォルダも
含めて include します。 ただし、フォルダのパスだけを指定した場合は、
*_obj.vbs ファイルだけ include します。
サンプル: objs フォルダのサブフォルダも含めて、*_obj.vbs を include します
include "objs"
関連
テスト
→ T_Include.vbs # [main2]
←
▼
▲
SectionTree オブジェクトを使って、全体の処理を複数のセクションに分割すると、途中のセクション
から実行することができるようになります。
たとえば、1つの関数の中で、複数のテストを連続して行っているとき、1つ1つのテストをセクションに
分けておくと、失敗したテストから実行させることができるようになります。
Sub Test_start( tests )
Set section = new SectionTree
'//SetStartSectionTree "T_Sample2" '// 一部のセクションだけ実行するときは有効にする
If section.Start( "T_Sample1" ) Then
'// ここは実行されません
End If : section.End_
'// section.Start 〜 End_ の外は、常に実行する
If section.Start( "T_Sample2" ) Then
'// ここから実行されます
End If : section.End_ '// ここで、「終了しました」と確認メッセージが表示される
If section.Start( "T_Sample2" ) Then
'// ここも実行されます
End If : section.End_
Pass
End Sub
サンプル
T_Sample2
(src)
ネストしているとき
サンプル
Sub Test_start( tests )
SetStartSectionTree "Sec1, SubSec2"
Dim section : Set section = new SectionTree
If section.Start( "Sec1" ) Then
If section.Start( "SubSec2" ) Then
'// ここは実行されます
End If : section.End_
End If : section.End_
Pass
End Sub
テスト
(各メソッドを参照)
サンプル画面
Section> Sec1
<Section tree="Sec1">
Section> Sec1 > SubSec2
<Section tree="Sec1,SubSec2">
:
</Section>
</Section>
サンプル画面
Section> T_Sample2
<Section tree="T_Sample2">
:
</Section>
セクションの開始と終了で、現在のセクションの位置(親のツリーノードのセクション名から現在まで)
を表示します(下記、サンプル画面)。
←
▼
▲
Function SectionTree::Start( SectionName as string ) as boolean
セクションの開始を指定します。
ファイル:
vbslib.vbs
【引数】
SectionName
返り値
セクション名
セクションを実行するかどうか
テスト
→ T_SectionTree.vbs # [T_SectionTree_1]
→ T_SectionTree.vbs # [T_SectionTree_2]
→ T_SectionTree.vbs # [T_SectionTree_Err]
(src)
→ T_SectionTree.vbs # [T_SectionTree_0]
←
▼
▲
Sub SectionTree::End_()
セクションの終了を指定します。
ファイル:
vbslib.vbs
テスト
(src)
←
▼
▲
<SectionTree CurrentSectionNames="Sec1"/>
Function SectionTree::xml() as string
現在のセクションを返します。
サンプル
Dim section : Set section = new SectionTree
If section.Start( "Sec1" ) Then
echo section
End If : section.End_
出力例:
現在のセクションを表示します。 なお、echo に指定するときは xml を省略できます。
ファイル:
vbslib.vbs
テスト
→ T_SectionTree.vbs # [T_SectionTree_1]
→ T_SectionTree.vbs # [T_SectionTree_2]
(src)
←
▼
▲
旧仕様
←
▼
▲
Sub EchoTestStart( TestSymbol as string )
テストシンボルをエコー出力します。
EchoTestStart "T_Samp1"
((( [T_Samp1] )))
サンプル1
サンプルの出力
EchoTestStart tests.Symbol
サンプル2
(src)
や
を実行するときは、EchoTestStart 関数を呼ばなくても、自動
Test_start 関数の中で複数のテストをするときに、EchoTestStart 関数を使うと、テストのログ
が見やすくなります。
的にシンボルがエコー出力されます。
廃止予定です。
代用
←
▼
▲
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)
は、で、グローバル領域を実行しているときだけでなく、呼び出す
関数を実行しているときも、path 引数に指定したパスの絶対パスが入ります。