(for Internet Explorer)
← ▼ ▲
↑
env
%〜% で囲まれた環境変数の名前を環境変数の値に展開します。
Function env( s as string ) as string
→ 環境変数を取得する (ExpandEnvironmentStrings)
(src)
引数に Empty が指定されると Empty を返します。
指定した環境変数が定義されていないときは、エラー E_NotFoundSymbol = &h80041006 になり
ます。
→ GetVar
→ SetVar
SetVar で設定した環境変数も展開します。
path = env( "%windir%" )
サンプル：
環境変数 windir を展開する
path = env( "%windir%\system32" )
サンプル：
環境変数以外も指定できます。
→ Environment (Shell) (VBScript)
関連
テスト
→ T_Var.vbs # [T_Var1]
paths = env( Array( "%windir%", "%windir%\system32" ) )
Assert IsSameArray( paths, Array( "C:\Windows", "C:\Windows\system32" ) )
引数に配列を指定すると、それぞれの配列要素にある環境変数を展開します。
ローカル環境変数の値が配列のとき、配列要素に環境変数があれば、それも展開します。
SetVar "VarA", 1
SetVar "VarB", 2
SetVar "VarC", Array( "X%VarA%X", "X%VarB%X" )
Assert IsSameArray( env("%VarC%"), Array( "X1X", "X2X" ) )
→ LoadEnvVars
→ SaveEnvVars
→ SetVarBreak
→ VarStack
← ▼ ▲
ArrayFromCmdLine
コマンドラインの１行を解析して、それぞれの項目を配列に格納する。
Function ArrayFromCmdLine( CmdLine as string ) as array of string
For Each column In ArrayFromCmdLine( "Sample.exe ""file (1).txt"" /opt1:2" )
echo column
Next
【引数】
CmdLine
返り値
コマンドラインの１行
（出力）それぞれの項目が入った配列
サンプル
上記 ArrayFromCmdLine の返り値は、Array( "Sample.exe", "file (1).txt", "/opt1:2" )
(src)
関連
→ ParseCmdLine
→ ArrayFromCSV
→ Split
→ T_CmdLine.vbs # [T_ArrayFromCmdLine]
テスト
それぞれの項目は、空白文字によって分割されます。
タブルクォートの中にある空白文字は、項目の分割になりません。
両端のダブルクォートは、項目に含まれません。
ダブルクォートは閉じてなくても構いません。
タブルクォートで囲まれている部分の前または後が空白文字ではないときは、それらも
１つの項目の中に含まれます。 その際、ダブルクォート文字は含まれません。
abc "def ghi" "j k
abc
def ghi
abc def
def
abc
abc"def" ab"c d"ef
abcdef
abc def
ダブルクォート文字を項目に含めるときは、\" と記述します。
" " で囲まれた中でも外でも同じです。
ab\"cd "12\"34"
12"34
ab"cd
\ が n 文字あって直後に " があるときは、n が偶数なら、\ 文字が n/2 文字と " " の
囲みの開始になります。 n が奇数なら、\ 文字 (n-1)/2 文字と " 文字になります。
" " で囲まれた中でも外でも同じです。
j k
\ の直後が " ではないときは、\ が連続していても、そのまま項目に入ります。
\\pc\n
\\pc\n
\" \\\" \\\\\" \\"a b" \\\\"c d"
"
\"
\\"
\a b
\\c d
"\" \\\" \\\\\" \\"a b" \\\\"c d"
" \" \\" \a
b \\c
d
→ コマンドラインの引数とエスケープ
参考
→ cmd.exe のコマンドラインの仕様を解析してみた - 永遠に未完成 (Web)
→ ArgsLog
その他の形式から配列
パラメーターを記録する
→ ArrayFromBashCmdLine
→ パラメータ （コマンドライン）, Arguments, args
← ▼ ▲
ArrayFromCmdLineWithoutOpt
コマンドラインの１行を解析して、オプション以外の項目を配列に格納する。
Function ArrayFromCmdLineWithoutOpt( CmdLine as string, OptionSigns as variant )
as array of string
arr = ArrayFromCmdLineWithoutOpt( "Sample.exe ""file (1).txt"" /opt1:2 param2", Empty )
【引数】
CmdLine
OptionSigns
コマンドラインの１行
オプション記号の配列、または Empty(= "/", "-")
サンプル
上記 ArrayFromCmdLineWithoutOpt の返り値は、Array( "Sample.exe", "file (1).txt", "param2" )
（出力）それぞれの項目が入った配列
返り値
← ▼ ▲
DicFromCmdLineOpt
コマンドラインの１行を解析して、オプション名をキーとした辞書を返します。
Function DicFromCmdLineOpt( CmdLine as string, OptionNames as array of string )
as dictionary of string or True
Dim params : Set params = DicFromCmdLineOpt( _
"Sample.exe /opt1:2 -flag param", Array( "/opt1", "-flag", "/no_opt" ) )
Assert IsSameArray( params( "no name" ), Array( "Sample.exe", "param" )
Assert params( "/opt1" ) = "2"
Assert params( "-flag" ) = True
Assert params( "-flag" )
Assert not params( "/no_opt" )
Assert IsEmpty( params( "/no_opt" ) )
【引数】
CmdLine
返り値
コマンドラインの１行
（出力）オプション名をキーとした辞書
オプションではないパラメーターは、キー "no name" の、配列型の値に格納されます。
オプションは、キーがオプション名、値が文字列型、True、Empty のいずれかになります。
サンプル
OptionNames
オプション名の配列
複数指定ができるオプションは、OptionNames に指定するオプション名の後に "::"
（コロン×２）を付けてください。 このとき、辞書の値は配列になります。
オプション名と値の間に空白文字が含まれる場合は、OptionNames に指定する
オプション名の後に ":" （コロン）を付けてください。
Dim params : Set params = DicFromCmdLineOpt( _
"-o value1 value2", Array( "-o:" ) )
Assert params( "-o" ) = "value1"
Assert IsSameArray( params( "no name" ), Array( "value2" )
Dim params : Set params = DicFromCmdLineOpt( _
"-o value1 -ovalue2", Array( "-o::" ) )
Assert IsSameArray( params( "-o::" ), Array( "value1", "value2" ) )
(src)
→ T_CmdLine.vbs # [T_DicFromCmdLineOpt]
テスト
関連
→ GetCommandLineOptionValue
← ▼ ▲
MeltCmdLine
i = 1
Do
s = MeltCmdLine( cmdline, i )
If i = 0 Then Exit Do
Loop
サンプル
コマンドラインの１項目を取り出し、通常の文字列に戻す。
Function MeltCmdLine( Line as string, in_out_Start as integer ) as string
【引数】
CmdLine
in_out_Start
コマンドラインの内容
（入力） 取り出しを開始する文字の位置、（出力）次に取り出す〜
返り値
取り出したコマンドラインの１項目
次の項目が無いときは、in_out_Start=0 になります。
(src)
→ T_CmdLine.vbs # [T_MeltCmdLine]
テスト
関連
→ MeltQuot
サンプルデータ
sample.exe param1 "param 2"
次の順番で返ります
sample.exe
param1
param 2
→ Split
→ ArrayFromCSV
← ▼ ▲
ArrayFromBashCmdLine
(src)
Function ArrayFromBashCmdLine( CmdLine as string ) as array of string
bash シェルのコマンドラインの１行を解析して、それぞれの項目を配列に格納する。
ArrayFromCmdLine
の bash 版です。
→ T_CmdLine.vbs # [T_ArrayFromBashCmdLine]
テスト
← ▼ ▲
MeltBashCmdLine
の bash 版です。
→ T_CmdLine.vbs # [T_ArrayFromBashCmdLine]
テスト
(src)
bash シェルのコマンドラインの１項目を取り出し、通常の文字列に戻す。
Function MeltBashCmdLine( Line as string, in_out_Start as integer ) as string
MeltCmdLine
← ▼ ▲
ParseCmdLine
→ MeltCmdLine
→ GetCmdLine
関連
コマンドラインが入った文字列を解析して、それぞれの引数を配列などに格納する。
Function ParseCmdLine( CmdLine as string ) as CmdLineArgs
Set args = ParseCmdLine( line )
【引数】
CmdLine
返り値
コマンドライン
引数にアクセスするオブジェクト
サンプル
サンプルデータ
sample.exe param1 "param 2"
次のように分割されます
sample.exe
param1
param 2
未対応
→ WScript.Arguments
現在のスクリプトを起動したときのコマンドラインではない、コマンドラインの内容に
アクセスしやすくします。
→ CmdLineArgs クラス
→ Split
→ ArrayFromCSV
← ▼ ▲
CmdLineArgs クラス
→ ParseCmdLine
取得
メンバー
WScript.Arguments
に準拠
未対応
← ▼ ▲
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]
テスト
(src)
← ▼ ▲
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)
← ▼ ▲
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]
テスト
← ▼ ▲
include
Sub include( path as string )
path に環境変数を含めることができます。 （%var% 形式）
クラス定義や関数定義が入った VBS ファイルのパスを指定します。
VBS ファイルで定義されたグローバル変数や関数は、include を呼び出した
関数の外から参照することはできません。
include "%ProgramFiles%\Movie Maker\moviemk.vbs"
サンプル：
関数定義やクラス定義が入った VBSファイルをインクルードします。
→ vbs_inc
(src)
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
→ コールや include を相対パスで指定するときの注意
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]
← ▼ ▲
SectionTree クラス
SectionTree オブジェクトを使って、全体の処理を複数のセクションに分割すると、途中のセクション
だけ実行することができるようになります。
たとえば、１つの関数の中で、複数のテストを連続して行っているとき、１つ１つのテストをセクションに
分けると、特定のテストだけ実行させることができるようになります。
Sub Test_start( tests )
Set section = new SectionTree
'//SetStartSectionTree "T_Sample2" '// 一部のセクションだけ実行するときは有効にする
If section.Start( "T_Sample1" ) 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]
← ▼ ▲
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 クラス
←
↓