Sub EnumFolderObject( FolderPath as string, out_Folders as array of Folder )
サブフォルダのオブジェクトを列挙します。 サブフォルダのサブフォルダも列挙します。
【引数】
out_Folders
FolderPath
(出力) サブフォルダのオブジェクトの配列
調べるフォルダのパス。 このフォルダの中から列挙します
Dim folders, fo, fi
Dim fname_key : Set fname_key = new StrMatchKey
fname_key.Keyword = LCase( "*.txt" )
EnumFolderObject "C:\FolderA", folders '// [out] folders
For Each fo In folders
For Each fi In fo.Files
If fname_key.IsMatch( fi.Name ) Then
echo fi.DateLastModified
End If
Next
Next
関連
サンプル
Sub GetSubFolders( folders as array of string, path as string )
サブフォルダのパスを列挙します。 サブフォルダのサブフォルダも列挙します。
【引数】
folders
path
(出力) サブフォルダのパスの配列
調べるフォルダのパス。 このフォルダの中から列挙します
関連
Sub RemoveWildcard( WildCard as string, fnames as array of string )
ワイルドカードでフォルダ名かファイル名に一致する文字列を配列から除きます。
【引数】
ワイルドカードを含むファイルまたはフォルダの名前
WildCard
パスが入った文字列の配列
fnames
WildCard で指定できるワイルドカードは、先頭に * だけです。
CSV 形式の1項目を取り出し、通常の文字列に戻す。
Function MeltCSV( Line as string, in_out_Start as integer ) as string
i = 1
Do
s = MeltCSV( line, i )
If not IsEmpty( s ) Then (s を使った処理)
If i = 0 Then Exit Do
Loop
【引数】
Line
in_out_Start
CSV 形式の1行
(入力) 取り出しを開始する文字の位置、(出力)次に取り出す〜
返り値
取り出した CSV 形式の1項目。Empty=項目に値が無い
サンプル
関連
各項目の両端の空白が削除されたものが戻ります。
Function CSVText( s as string ) as string
CSV の1項目に変換します。
サンプル:
s = CSVText( "a,b" )
s は、"""a,b""" になります
Function LoadXML( PathOrStr as string, Opt as variant ) as IXMLDOMElement
XML ファイル、または XML 形式の文字列を読み込みます。
【引数】
PathOrStr
XML ファイルのパス、または XML 形式文字列
Opt
オプション(下記)
IXMLDOMElement
XML のルート要素
返り値
Opt 引数
F_NoRoot フラグ
XML のルート要素が無い XML を読み込みます。 返り値は、内部で自動的に
加えられたルート要素 <Dummy_Root_> になります。
先頭が < でないときは、自動的にルート要素が加えられます。
F_Str フラグ
PathOrStr 引数を XML 形式文字列として処理します
サンプル: XML 形式文字列を展開する
Dim s : s = "ABC <TAG1 attr='value1'/> 123"
Dim root : Set root = LoadXML( s, F_NoRoot or F_Str )
Dim value : value = root.selectSingleNode( "./TAG1" ).getAttribute( "attr" )
'// value = "value1"
関連
LoadXML
Dim root, elem, attr
Set root = LoadXML( "sample.xml", Empty )
'//=== read 1 value
WScript.Echo root.selectSingleNode( "./Tests/Test" ).getAttribute( "result" )
'//=== loop each tags
For Each elem In root.selectNodes( "./Tests/Test" )
WScript.Echo "result, "+ elem.getAttribute( "result" )
Next
'//=== loop each attributes
For Each elem In root.selectNodes( ".//Test" )
WScript.Echo "<" + elem.tagName + ">"
For Each attr In elem.attributes
WScript.Echo attr.name + "=" + attr.value
Next
Next
参考
"sample.xml"
"./Tests/Test"
"./Tests/Test"
"result"
"result"
".//Test"
result
→ DOM サンプル
LoadXML
日本語があるときは、Unicode にするか、XML宣言で Shift-JIS を指定してください。
→ XmlFilter ツール (.zip)
テスト
→ T_XML フォルダ
Function ObjToXML( TagName as string, Objs as object or array, Opt as variant ) as string
オブジェクトの基本的なデータを XML 文字列に変換します。
s = ObjToXML( Empty, obj, Empty )
サンプル:
【引数】
TagName
ルート・タグ名、Empty にすると、ルートタグを追加しません。
返り値
Objs
XML データの内容にするオブジェクト、またはその配列
Opt
Empty を指定してください
XML 文字列
関連
オブジェクトのクラス名と、Name プロパティ、DefinePath プロパティから XML データを作成します。
他のプロパティも含んだ XML データは、xml プロパティを作成してください。
→ SetDefinePath
Function XmlAttr( s as string ) as string
XML の属性値に変換します。
サンプル:
s = XmlAttr( "<""" )
s は、"<"" になります
関連
Function XmlText( s as string ) as string
XML のテキスト(タグの外)に変換します。
サンプル:
s = XmlText( "<""" )
s は、"<""" になります
関連
Sub ReplaceTextFile( SrcPath as string, TmpDstPath as string,
bDstWillBeExist as boolean, ReplaceList as ReplaceItem, Opt as variant )
ファイルの一部を置き換えます。
【引数】
SrcPath
TmpDstPath
置き換えようとするファイル
一時ファイルのパス、または置き換えた後のパス
TmpDstPath が置き換えた後のパス=True, 一時パス=False
bDstWillBeExist
ReplaceList
置き換えるテキスト
Opt
Empty を指定してください
Dim reps : new_ReplaceItem reps, 1
reps(0).Src = "%base%" : reps(0).Dst = g_sh.CurrentDirectory
ReplaceTextFile "file.txt", "__file.txt", False, reps, Empty
サンプル:
1
new_ReplaceItem については、
Class ReplaceItem
Public Src
Public Dst
End Class
%base%
g_sh.CurrentDirectory
file.txt
__file.txt
参考
ファイルを変換するときの出力ファイルのフォーマットを指定します。
【引数】
Format
出力ファイルのフォーマット
F_Shift_JIS (=&h1000)
F_Unicode (=2)
デフォルト
Dim fmt : Set fmt = new TextFileConvertFormat : fmt.Set_ F_Unicode
サンプル:
Sub TextFileConvertFormat::Set_( Format as integer )
F_Unicode
Set は予約語なので、末尾にアンダースコアを入れて Set_ にしています。
Sub ConvertToAbsPath( SrcPath as string, DstPath as string )
%AbsPath(..\SampleLib)%
テキストファイルの中の相対パスや特殊フォルダのパスを絶対パスに変換してコピーします。
変換前
変換後のサンプル
C:\folder\SampleLib
[ テスト ]
%DesktopPath%
C:\Documents and Settings\user1\デスクトップ
【引数】
SrcPath
DstPath
変換前のファイルのパス
変換後のファイルのパス(新規作成または上書き)
(src)
%AbsPath(x)% の x に相対パスを記述すると、SrcPath のファイルが入ったフォルダを
相対パスの基準にした絶対パスに変換されます。
% を使った環境変数も展開されます。
参考
Dim rep, line
Set rep = StartReplace( "a.txt", GetTempPath("*.txt"), False )
Do Until rep.r.AtEndOfStream
line = rep.r.ReadLine()
line = Replace( line, "Value=0", "Value=1" )
rep.w.WriteLine line
Loop
rep.Finish
Function StartReplace( SrcPath as string, TmpDstPath as string, bDstWillBeExist as boolean )
as StartReplaceObj
ファイルの一部を置き換える準備をします。
【引数】
SrcPath
TmpDstPath
置き換えようとするファイル
一時ファイルのパス、または置き換えた後のパス
TmpDstPath が置き換えた後のパスかどうか
bDstWillBeExist
StartReplace を呼び出すと、SrcPath と TmpDstPath のファイルを開きます。
返り値を使って、ファイルにアクセスできます。(下記サンプルを参照)
返り値に格納した変数が、カーベジコレクタによって破棄されると、全てのファイルを閉じ、
必要なら、TmpDstPath から SrcPath へ、ファイルコピーを行い、TmpDstPath を削除します。
返り値
コンテキスト
[ テスト ]
Sub main2( Opt, AppKey )
Dim exe_name
Dim desktop : desktop = g_sh.SpecialFolders( "Desktop" )
Dim rep, line
Dim w_:Set w_=AppKey.NewWritable( desktop ).Enable()
'//=== Input exe name
Do
exe_name = input( "exe name>" )
If exist( desktop + "\" + exe_name ) Then
Raise 1, "すでにデスクトップに " + exe_name + " が存在するため、新規作成できません"
Else
Exit Do
End If
Loop
'//=== Make output folder
mkdir desktop + "\" + exe_name
copy g_vbslib_folder + "*", desktop + "\" + exe_name + "\vbslib"
'//=== Make exe_name.c
Set rep = StartReplace( "files\template.c", _
desktop + "\" + exe_name + "\" + exe_name + ".c", True )
Do Until rep.r.AtEndOfStream
line = rep.r.ReadLine()
line = Replace( line, "Sample", exe_name )
rep.w.WriteLine line
Loop
rep.Finish
'//=== Open output folder
Setting_openFolder desktop + "\" + exe_name
End Sub
サンプル (ウィザード)
sample_wizard.vbs
wizard
sample_wizard.vbs
files
template.c
デスクトップに、テンプレート・ファイルを少し加工してフォルダを作成します。
exe name>
と表示されるので、入力すると、
_src\Test\vbslib_test\T_Replace\T_Replace_Sample1 にあります。
参考
Function StartReplace2( SrcPath as string, MidPath as string, Flags as integer,
TmpDstPath as string, bDstWillBeExist as boolean ) as StartReplaceObj
F_Txt2BinTxt を指定してください(下記)
ファイルの一部を置き換えて、更にフィルタ処理をするための準備をします。
【引数】
SrcPath
TmpDstPath
置き換えようとするファイル
一時ファイルのパス、または置き換えた後のパス
TmpDstPath が置き換えた後のパスかどうか
bDstWillBeExist
返り値
コンテキスト
MidPath
Flags
一時ファイルのパス
StartReplaceObj.w に、Chr(&hFF) から始める行を出力すると、その行はバイナリになり
ます。
参考
テキストファイルの一部を置き換えるインターフェイス
取得
r
w
置き換えようとするファイルのストリーム
一時ファイル、または置き換えた後のファイルのストリーム
Finish
正常に完了したら呼び出す必要がある関数
Class_Terminate
デストラクタ。 Finish が呼ばれなかったら、置き換えをキャンセルします。
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
クラス定義や関数定義が入った VBSファイルをインクルードします。
指定したシンボルのプロシージャが定義されているかどうかを返します。
現在のプロセスのまま
コマンドライン・オプションが指定されているかどうかを返す
環境変数を展開します
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
指定した時間だけ待ちます。
指定したファイルが作られるまで待ちます。
新プロセス
待ち
[ テスト ]
関連
Sub start( cmdline as string )
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
cmdline に環境変数を含めることができます。 (%var% 形式)
start """%ProgramFiles%\Movie Maker\moviemk.exe"""
サンプル:
cmdline にフォルダやデータファイルのパスを指定すると、そのフォルダやファイルを
ダブルクリックしたときと同じように開きます。
コマンドラインではパスをダブルクォーテーションで囲むこと
ファイルが見つからないと、E_WIN32_FILE_NOT_FOUND エラーになります
関連
Dim cmd
cmd = Setting_getEditorCmdLine( 1 )
cmd = Replace( cmd, "%1", "C:\file.txt" )
start cmd
サンプル:
Function RunProg( cmdline as string, stdout_stderr_redirect as string ) as integer
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
【引数】
cmdline
stdout_stderr_redirect
コマンドライン(実行ファイルパス+パラメータ)
出力先のファイルパス(下記)
返り値
エラーレベル(main 関数の返り値)
Empty や "" のときは、標準出力へ出力します。(コマンドプロンプト・ウィンドウが開きます)
"_debug" のときは、標準出力へ出力し、ウィンドウを閉じません。
"nul" のときは、出力内容を破棄します。
一般的なシェルと異なり、リダイレクトしても標準出力へも出力されます。
stdout_stderr_redirect 引数
コマンドプロンプトのコマンドを実行するときは、次のようにしてください。
RunProg "cmd /c (dir > files.txt)", ""
RunProg "cmd /c (cd sub & dir > ..\files.txt)", ""
複数のコマンドを実行するときは、& をつけてください。
プロセスが終了するまで、関数内部で待ちます。
VBScript を実行するときは、cscript を経由してください。
vbslib の input などを使っているときは、/GUI_input:1 または /set_input を指定してください。
RunProg "cscript //nologo sample.vbs /GUI_input:1", ""
新プロセスのカレントフォルダは、RunProg を呼び出す直前のカレントフォルダになります。
コマンドプロンプトから標準入力するプログラムは、停止します。
対策
RunProg "batch1.bat", ""
バッチファイルを実行するときは、次のようにしてください。
(pause など、標準入力するコマンドを使わないようにしてください)
→ T_Call\TryExec.vbs
実証コード
RunProg "batch1.bat /close", ""
閉じないバッチファイルは、閉じるようにする
参考
関連
Dim g_ChildHead as string
新プロセスが標準出力へ出力する内容を表示するときに、行頭に追加する文字列。
デフォルトは、何も追加しません。
グローバル変数です。
VBScript をデバッガに接続するときは、下記のように //x, /g_debug:1 を付けてください。
RunProg "cscript //nologo //x sample.vbs /g_debug:1", ""
関連
→ RunProg (clib)
環境変数を文字列に展開します。
Function env( s as string ) as string
引数に Empty が指定されると Empty を返します。
指定した環境変数が定義されていないときは、エラー E_NotFoundSymbol = &h80041006
になります。
関連
SetVar で設定した環境変数も展開します。
path = env( "%windir%" )
サンプル:
環境変数 windir を展開する
path = env( "%windir%\system32" )
サンプル:
環境変数以外も指定できます。
Function ArgumentExist( Name as string ) as boolean
【引数】
Name
コマンドライン・オプション名
返り値
オプションが指定されているかどうか
指定した名前のコマンドライン・オプションが指定されているかどうかを返します。
/Opt1:1 ではなく /Opt1 では、WScript.Arguments.Named.Item("Opt1") は
Empty を返し、/Opt1 を指定しなかったときと、区別ができません。
ArgumentExist は、区別ができます。
Name の大文字小文字は区別します。
関連
WScript.Arguments.Named.Item("Opt1")
If ArgumentExist( "Opt1" ) Then ...
サンプル:
→ GetArgvNamed (clib)
Function call_vbs( path as string, func as string, param as variant )
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
【引数】
path
func
VBScript ファイルのパス
呼び出す関数の名前
path に環境変数を含めることができます。 (%var% 形式)
call_vbs "%ProgramFiles%\Movie Maker\moviemk.vbs", "main", ""
サンプル:
関数に渡すパラメータ
param
関数の返り値
返り値
呼び出し先の関数は、次の型にしてください。
Function main( param )
現在のプロセスのまま、別の .vbs ファイルを呼び出します。
グローバル変数は、呼び出し先で宣言したものが、使えるようになります。
呼び出し先に関数を実行するときのカレントフォルダは、そのスクリプト
ファイルがあるフォルダになります。
path に相対パスを指定するときは注意が必要です。