(for Internet Explorer)
← ▼ ▲
↑
CmdLineFromStr
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]
テスト
それぞれの配列要素は、空白で区切ります。
文字列に空白や >, <, ^, | 記号を含むときは、" " で囲みます。
文字列にダブル・クォーテーションや \ 記号があるときは、それらの文字が、これから
起動するプログラムに渡るように \ を追加します。
・
・
ソース
→ vbslib.vbs
関連
→ ArgsLog
→ MeltCmdLine
→ ArrayFromCmdLine
→ \' → " の変換の詳細 （ダブル クォーテーションへの変換）
← ▼ ▲
GetCmdLine
Function GetCmdLine() as string
現在のスクリプトを起動したときのコマンドラインを返します。
(src)
実行ファイル名と、パラメーターの両方を含みます。
関連
→ WScript.Arguments
→ ParseCmdLine
→ g_debug_params
← ▼ ▲
ArgumentExist
Function ArgumentExist( Name as string ) as boolean
【引数】
Name
コマンドライン・オプション名
返り値
オプションが指定されているかどうか
指定した名前のコマンドライン・オプションが指定されているかどうかを返します。
/Opt1:1 ではなく /Opt1 では、WScript.Arguments.Named.Item("Opt1") は
Empty を返し、/Opt1 を指定しなかったときと、区別ができません。
ArgumentExist は、区別ができます。
Name の大文字小文字は区別します。
→ パラメータを取得する (VBS)
(src)
WScript.Arguments.Named.Item("Opt1")
If ArgumentExist( "Opt1" ) Then ...
サンプル：
→ GetArgvNamed (clib)
→ g_debug_params
関連
WScript.Arguments.Unnamed(0)
→ GetCommandLineExist (clib)
パラメーターが必須のオプションには、ArgumentExist を呼ぶ必要はありません。
← ▼ ▲
GetCommandLineOptionName
(src)
Function GetCommandLineOptionName( OneParameter as string ) as string
オプション名＋値から、オプション名を返します。
【引数】
OneParameter
返り値
オプション名＋値
オプション名
サンプル：
name = GetCommandLineOptionName( "/OptionA:12" )
'// name = "OptionA"
→ T_CmdLine.vbs # [T_CommandLineOption]
テスト
← ▼ ▲
GetCommandLineOptionValue
(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]
テスト
← ▼ ▲
ModifyCmdLineOpt
コマンドラインの１行にある、オプションの値を変更します。
Function ModifyCmdLineOpt( CmdLine as string,
OptionName as string, NewOptionNameAndParam as string ) as string
【引数】
CmdLine
NewOptionNameAndParam
コマンドラインの１行
オプション名と、変更後の値。 削除=Empty
OptionName
オプション名
（出力） 変更後のコマンドラインの１行
返り値
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 引数の末尾に "::"（コロン×２）を付ける
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 引数の末尾に "::"（コロン×２）
と値を付ける
new_cmdline = ModifyCmdLineOpt( "-o ValueA -o ValueB Value1", "-o::ValueB", Empty )
Assert new_cmdline = "-o ValueA Value1"
(src)
→ T_CmdLine.vbs # [T_ModifyCmdLineOpt]
テスト
← ▼ ▲
オプション引数、ビットフラグ
移植性を持たせつつ将来のバージョンで関数の引数を追加できるようにしたいときは、
下記の引数を検討するとよいでしょう。
ビットフラグ引数
オプション引数（配列）
→ IsBitSet
→ ParseOptionArguments
移植性を持たせつつ引数の数を変更したいときは、
新しく関数名を "<従来の関数名>Ex" にするか、
古い関数名を "<従来の関数名>_Old" にするとよいでしょう。
← ▼ ▲
IsBitSet
Sub Main()
Set c = get_SampleConsts()
echo FuncA( c.Bit0 )
echo FuncA( c.Bit1 )
echo FuncA( c.Bit0 or c.Bit1 )
echo FuncA( 0 )
echo FuncA( Empty )
End Sub
Function FuncA( BitFlags )
Set c = get_SampleConsts()
s = ""
If IsBitSet( BitFlags, c.Bit0 ) Then s = s + "A"
If IsAnyBitsSet( BitFlags, c.Bit0 or c.Bit1 ) Then s = s + "B"
If IsAllBitsSet( BitFlags, c.Bit0 or c.Bit1 ) Then s = s + "C"
If IsBitNotSet( BitFlags, c.Bit0 ) Then s = s + "a"
If IsAnyBitsNotSet( BitFlags, c.Bit0 or c.Bit1 ) Then s = s + "b"
If IsAllBitsNotSet( BitFlags, c.Bit0 or c.Bit1 ) Then s = s + "c"
FuncA = s
End Function
'*************************************************************************
' <<< [get_SampleConsts] >>>
'*************************************************************************
Dim g_SampleConsts
Function get_SampleConsts()
If IsEmpty( g_SampleConsts ) Then _
Set g_SampleConsts = new SampleConsts
Set get_SampleConsts = g_SampleConsts
End Function
Class SampleConsts
Public Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6, Bit7, Bit8, Bit9
Public Bit10, Bit11, Bit12, Bit13, Bit14, Bit15, Bit16, Bit17, Bit18, Bit19
Public Bit20, Bit21, Bit22, Bit23, Bit24, Bit25, Bit26, Bit27, Bit28, Bit29
Public Bit30, Bit31
Private Sub Class_Initialize()
Bit0 = &h0001
Bit1 = &h0002
Bit2 = &h0004
Bit3 = &h0008
Bit4 = &h0010
Bit5 = &h0020
Bit6 = &h0040
Bit7 = &h0080
Bit8 = &h0100
Bit9 = &h0200
Bit10 = &h0400
Bit11 = &h0800
Bit12 = &h1000
Bit13 = &h2000
Bit14 = &h4000
Bit15 = CLng("&h8000")
Bit16 = &h00010000
Bit17 = &h00020000
Bit18 = &h00040000
Bit19 = &h00080000
Bit20 = &h00100000
Bit21 = &h00200000
Bit22 = &h00400000
Bit23 = &h00800000
Bit24 = &h01000000
Bit25 = &h02000000
Bit26 = &h04000000
Bit27 = &h08000000
Bit28 = &h10000000
Bit29 = &h20000000
Bit30 = &h40000000
Bit31 = &h80000000
End Sub
Public Function ToStr( Number )
Select Case Number
Case Bit0 : ToStr = "Bit0"
Case Bit1 : ToStr = "Bit1"
'// ...
End Select
End Function
End Class
Function IsBitSet( Variable as integer, ConstValue as integer ) as boolean
１つのビットが立っているかどうかを判定します。
【引数】
Variable
ConstValue
調べる対象のビット・フィールド値
調べる位置のビットを１にしたビット・フィールド値
OrConstValue
調べる位置の複数のビットを１にしたビット・フィールド値
サンプル
ソース
複数のビットのうち１つ以上が立っているかどうかを判定します。
Function IsAnyBitsSet( Variable as integer, OrConstValue as integer ) as boolean
複数のビットのすべてが立っているかどうかを判定します。
Function IsAllBitsSet( Variable as integer, OrConstValue as integer ) as boolean
１つのビットが立っていないかどうかを判定します。
Function IsBitNotSet( Variable as integer, ConstValue as integer ) as boolean
複数のビットのうち１つ以上が立っていないかどうかを判定します。
Function IsAnyBitsNotSet( Variable as integer, OrConstValue as integer ) as boolean
複数のビットのすべてが立っていないかどうかを判定します。
Function IsAllBitsNotSet( Variable as integer, OrConstValue as integer ) as boolean
判定結果
返り値
IsAnyBitsSet
IsAllBitsSet
IsBitNotSet
IsAnyBitsNotSet
IsAllBitsNotSet
→ T_Var.vbs
テスト
T_IsBitSet
→ vbslib.vbs
関連
→ Hex
参考
→ ビット演算
← ▼ ▲
ParseOptionArguments
Set object = new SampleClass
FuncA Array( &h0001 or &h0002, "ABC", object )
Sub FuncA( in_out_Options )
ParseOptionArguments in_out_Options
Assert in_out_Options("integer") = &h0001 or &h0002
Assert in_out_Options("string") = "ABC"
Assert in_out_Options("SampleClass") Is object
Assert not in_out_Options.Exists("NotPassedType")
option_flags = in_out_Options("integer")
If in_out_Options.Exists("SampleClass") Then
Set options = in_out_Options("SampleClass")
Else
Set options = new SampleClass
End If
End Sub
Sub ParseOptionArguments( in_out_Options as variant )
引数に指定した配列型のオプション引数を辞書型に変換します。 キーは要素の型名です。
【引数】
in_out_Options
（入力） 任意の型の変数や配列や辞書やEmpty、（出力） 辞書
サンプル
ソース
→ T_Var.vbs
テスト
T_ParseOptionArguments
→ vbslib.vbs
キーは、大文字小文字を区別しません。
整数型（integer, byte, long）のアイテムに対応するキーは、"integer" です。
浮動小数型（single, double）のアイテムに対応するキーは、"float" です。
その他の型は、
TypeName
の返り値がキーになります。 例： NameOnlyClass
ParseOptionArguments は、オプション引数（オプション的な引数）を扱いやすくします。
ユーザーは、オプションを指定しないときは Empty を渡します。
オプションを１つ以上指定するときは、配列型にまとめて渡します。
オプションを１つ指定するときは、配列に入れなくても構いません。
処理が開始されると、本関数によって、オプション引数は型をキーとした辞書に変換されます。
in_out_Options 引数に辞書を指定したときは、何もしません。
入力した配列に含まれない型をキーに指定した場合、アイテムは Empty になります。
サンプル
FuncA 123
Sub FuncA( in_out_Options )
ParseOptionArguments in_out_Options
Assert in_out_Options("integer") = 123
End Sub
オプション引数をそのまま関数呼び出しに渡しているときは、辞書型に置き換わって返ってくる
可能性があります。 そして、その変数が再びオプション引数に渡される可能性があります。
ですので、必ず ParseOptionArguments を呼び出した後で、辞書のキーの有無からオプション
の有無を判定してください。
オプション引数を直接 TypeName 関数などで判定しないでください。
キーワード：
in_out_Config
ArrayClass 型のアイテムに対応するキーは、"ArrayClass" ですが、配列型のアイテムに
対応するキーはできません。 配列は、上記のとおり複数のオプションをまとめるものとして
処理します。
← ▼ ▲
include
Sub include( path as string )
path に環境変数を含めることができます。 （%var% 形式）
クラス定義や関数定義が入った VBS ファイルのパスを指定します。
VBS ファイルで定義されたグローバル変数や関数は、include を呼び出した
関数の外から参照することはできません。
include "%ProgramFiles%\Movie Maker\moviemk.vbs"
関数定義やクラス定義が入った VBSファイルをインクルードします。
→ vbs_inc
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
path に相対パスを指定するときは注意が必要です。
二重定義エラーが出るときの対策
インクルードする vbs ファイルに、すでに定義されているクラスの
定義があると、エラーになります。クラスは、インスタンスに影響する
ため上書きできません。 （関数は上書きできます）
二重にインクルードしないようにするか、クラス定義だけ１回だけ
インクルードするファイルに分割してください。
Dim g_TestClass : If IsEmpty( g_TestClass ) Then _
include "TestClass.vbs" : g_TestClass = True
サンプル： １回だけインクルードする
→ g_SrcPath
→ include_objs
フォルダのパスを指定したり、ワイルドカードを指定すると、サブフォルダも
含めて include します。 ただし、フォルダのパスだけを指定した場合は、
*_obj.vbs ファイルだけ include します。
objs フォルダのサブフォルダも含めて、*_obj.vbs を include します
include "objs"
関連
テスト
→ T_Include.vbs # [main2]
→ FuncRedir_add
→ g_start_in_path
サンプル
サンプル
include は、
vbs_inc
の内部からも呼ばれます。
→ vbs_inc_sub.vbs
ソース
→ vbslib_mini.vbs
← ▼ ▲
SectionTree クラス
SectionTree オブジェクトを使って、全体の処理を複数のセクションに分割すると、途中のセクション
から実行することができるようになります。
たとえば、１つの関数の中で、複数のテストを連続して行っているとき、１つ１つのテストをセクションに
分けておくと、失敗したテストから実行させることができるようになります。
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
Start
End_
(src)
SetStartSectionTree
ネストしているとき
サンプル
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>
セクションの開始と終了で、現在のセクションの位置（親のツリーノードのセクション名から現在まで）
を表示します（下記、サンプル画面）。
関連
→ ログ
← ▼ ▲
Start (SectionTree)
Function SectionTree::Start( SectionName as string ) as boolean
セクションの開始を指定します。
ファイル：
vbslib.vbs
【引数】
SectionName
返り値
セクション名
セクションを実行するかどうか
[ 親: SectionTree クラス ]
テスト
→ 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]
デバッグ用に、本関数の中から呼び出すコールバック関数を登録できます。
→ OnStart (SkipSectionGlobal)
← ▼ ▲
End_ (SectionTree)
Sub SectionTree::End_()
セクションの終了を指定します。
ファイル：
vbslib.vbs
[ 親: SectionTree クラス ]
テスト
→ Start (SectionTree)
(src)
← ▼ ▲
xml (SectionTree)
<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
[ 親: SectionTree クラス ]
テスト
→ T_SectionTree.vbs # [T_SectionTree_1]
→ T_SectionTree.vbs # [T_SectionTree_2]
(src)
← ▼ ▲
旧仕様
← ▼ ▲
EchoTestStart
Sub EchoTestStart( TestSymbol as string )
テストシンボルをエコー出力します。
EchoTestStart "T_Samp1"
((( [T_Samp1] )))
サンプル１
サンプルの出力
EchoTestStart tests.Symbol
サンプル２
(src)
Test.vbs
や
InputCommand
を実行するときは、EchoTestStart 関数を呼ばなくても、自動
Test_start 関数の中で複数のテストをするときに、EchoTestStart 関数を使うと、テストのログ
が見やすくなります。
的にシンボルがエコー出力されます。
廃止予定です。
代用
→ SectionTree クラス
←
↓