(for Internet Explorer)
← ▼ ▲
↑
SetParentFolderProxyName (SyncFilesMenu)
Sub SyncFilesMenu::SetParentFolderProxyName( IndexNum as integer, Name as string )
親フォルダーの指定を、サブ・フォルダーに置き換えるように設定します。
【引数】
IndexNum
Name
フォルダー番号
サブ・フォルダー名
→ T_SyncFiles.vbs # T_SyncFilesParent
テスト
Set menu = new SyncFilesMenu
menu.IsCompareTimeStamp = False
menu.AddRootFolder 0, "Folder0"
menu.AddRootFolder 1, "Folder1"
menu.SetParentFolderProxyName 1, "_parent"
menu.AddFile "..\Sample.txt"
サンプル
_parent
上記の場合、Folder0\..\Sample.txt と、Folder1\_parent\Sample.txt を比較します。
(src)
← ▼ ▲
SynchronizeFolder
SynchronizeFolder "C:\FolderA", "C:\FolderB", "C:\Synchronized", "*", Empty
Sub SynchronizeFolder( FolderA_Path as string, FolderB_Path as string,
SynchronizedPath as string, Mask as string, in_out_Options as Empty )
２つのフォルダーを同期します。
【引数】
FolderA_Path
FolderB_Path
同期をとるフォルダーのパス
同期をとるもう１つのフォルダーのパス
SynchronizedPath
同期した内容をとっておくフォルダーのパス
サンプル
ソース
Mask
in_out_Options
Empty を指定してください
ファイル名のフィルター（ワイルドカード）
テスト
→ T_SynchronizeFolder.vbs
→ ToolsLib.vbs
両方のフォルダーにある同じ名前のファイルが更新されていたら、手動で更新するように
エラーが表示されます。 hint_path にできたファイルに、手動で同期する必要がある
ファイルのパスが書かれています。 削除されたファイルや、タイムスタンプが過去に
戻ったファイルも手動で同期する必要があります。
<ERROR msg="自動で同期できないファイルがあります" hint_path="C:\hint.txt"/>
>SynchronizeFolder
A: "C:\FolderA"
B: "C:\FolderB"
以下のファイルが、両方のフォルダーで変更されました。
"1.txt"
Updated: "C:\FolderA\1.txt"
Updated: "C:\FolderB\1.txt"
例： C:\hint.txt
If TryStart(e) Then On Error Resume Next
SynchronizeFolder folder_A, folder_B, folder_S, "*.h", Empty
If TryEnd Then On Error GoTo 0
If e.num <> 0 Then
Set root = LoadXML( e.desc, F_Str )
hint_path = root.getAttribute( "hint_path" )
echo ""
echo "自動で同期できないファイルのパスを、テキスト・エディターで表示します。"
start GetEditorCmdLine( hint_path )
e.Raise
End If
サンプル
エラーがあったら、その内容をエディターで開く
関連
→ SyncFilesX
参考
→ SyncFilesX_Class (SyncFilesX ソース)
← ▼ ▲
その他
→ PatchAndBackUpDictionaryClass
← ▼ ▲
SetDateLastModified
Sub SetDateLastModified( in_PathAndDate as dictionary of CDate )
タイムスタンプ（ファイルの更新日時）を設定します。
【引数】
in_PathAndDate
キーがタイムスタンプを更新するファイルのパス、アイテムが日付、の辞書
→ vbslib_helper.c
ソース
テスト
→ T_File.c
T_SetDateLastModified
→ vbslib.vbs
in_PathAndDate 引数のアイテムには、
を指定します。
サンプル
SetDateLastModified Dict(Array( _
"FileA.txt", CDate( "2008/06/16 12:00:00" ), _
"FileB.txt", CDate( "2009/09/29 23:59:59" ) ))
Date 型
関連
→ File::DateLastModified
指定する日時のタイムゾーンは、ローカルです。
内部で、vbslib_helper.exe を呼び出しているため、ファイルを1つずつ指定すると遅くなります。。
Dict
→ CheckFolderMD5List
の c.TimeStamp オプション
→ MD5List
の Stamp
← ▼ ▲
touch
Sub touch( Path as string )
タイムスタンプ（ファイルの更新日時）を現在の日時に更新します。
【引数】
Path
タイムスタンプを更新するファイルのパス
テスト
→ T_File.c
ソース
T_touch
→ vbslib.vbs
→ vbslib_helper.c
Path に指定したファイルが存在しないときは、空のファイルを作成します。
← ▼ ▲
SetDateLastModifiedKS
Sub SetDateLastModifiedKS( in_PathAndDate as dictionary of CDate, in_Option )
テキスト ファイルの中の $Date: 〜 $ にある日時のテキストを更新します。
【引数】
in_PathAndDate
キーが日時を更新するファイルのパス、アイテムが日付、の辞書
指定する日時のタイムゾーンは、ローカルです。
内部で、vbslib_helper.exe を呼び出しています。 ただし、in_Option = False を指定したときは、
呼び出しません。 その分、少し高速に処理しますが、$Date: の値を更新したことにより、
タイムスタンプが現在の日時になります。
in_PathAndDate 引数のアイテムを Empty にすると、現在のタイムスタンプに更新します。
in_PathAndDate 引数のアイテムを
in_Option
Empty, True = 通常、False = 高速、タイムスタンプは現在にする
または W3CDTF 形式の文字列の値にすると、
Date 型
日時のテキストだけでなく、ファイルのタイムスタンプも更新します。
→ vbslib_helper.c
ソース
テスト
→ T_File.c
T_SetDateLastModified
→ vbslib.vbs
サンプル
SetDateLastModifiedKS Dict(Array( _
"FileA.txt", Empty, _
"FileB.txt", "2009-09-29T23:59:59+09:00" )), Empty
関連
→ File::DateLastModified
→ SetDateLastModified
Dict
in_PathAndDate 引数のキーを要素数2 の CSV形式（コンマ区切り）にすると、1つ目の要素を
入力ファイルのパス、2つ目の要素を出力ファイルのパスとして処理します。
SetDateLastModifiedKS Dict(Array( _
"FileA_Template.txt, FileA.txt", Empty )), Empty
サンプル
FileA.txt ファイルの中の $Date: 〜 $ の中を W3CDTF 形式でファイルのタイムスタンプに
設定します。
FileB.txt ファイルの中の $Date: 〜 $ を下記のように変更します。（タイムゾーンが日本の場合）
// $Date: 2009-09-29T23:59:59+09:00 $
FileA_Template.txt ファイルの中の $Date: 〜 $ の中を W3CDTF 形式でファイルのタイム
スタンプに設定した FileA.txt ファイルを作成または上書きします。
← ▼ ▲
キーワードは、必ず
grep (検索)
Function grep( Parameters as string, OutPath as string ) as array of GrepFound
ファイルの中で、指定したキーワードを含む行を検索します。
【引数】
Parameters
OutPath
オプションと、キーワードと、検索対象フォルダーやワイルドカード（複数可）
Empty または 検索結果の出力先のファイル・パス
返り値
GrepFound オブジェクト
founds = grep( "-r ""define"" ""..\FolderA\*""", Empty ) '// as array of GrepFound
'// 返り値のサンプル
'// UBound( founds ) は、見つかった行数−１
'// founds(0).Path = "..\FolderA\grep_target1.txt"
'// founds(0).LineNum = 2
'// founds(0).LineText = " #define string"
For Each found In founds
echo found.LineText
Next
Parameters は、Linux の
サンプル
"define" を検索する。 結果は返り値で取得する。
検索対象ファイルは、..\FolderA フォルダーで、サブ・フォルダーも含める。(-r)
grep_target1.txt:2: define string
grep_target3.txt:2: define string
grep_target3.txt:4: define text
sub\grep_target1.txt:2: define string
サンプル
grep "-r -i define *.txt *.ini", "grep_out.txt"
grep_out.txt ファイルのサンプル
"define" を検索する。 結果は、"grep_out.txt" ファイルに出力する。
検索対象ファイルは、拡張子が .txt と .ini で、サブ・フォルダーも含める。(-r)
大文字小文字は区別しない。(-i)
で指定してください。
正規表現 (Linux の egrep形式)
→ 正規表現
参考
→ T_Grep.vbs
テスト
→ ファイル名、パス (Windows)
参考
GrepFound
GrepFound
関連
→ sscanf
文字列の途中を取り出します。
Parameters に指定した検索対象のパスが、相対パスなら、Path プロパティも
相対パスになります。 そのときの基準フォルダーは、カレント・フォルダーになります。
GrepFound::Path プロパティ
→ grep コマンド (vbslib)
\*
→ findstr (DOS)
互換性
"|" （バーチカルライン）は、OR の意味になります。
"|" を検索したいときは、"\|" のようにエスケープしてください。
"-" を検索したいときは、"\-" のようにエスケープしてください。
"/"（スラッシュ）は、一般文字であり、エスケープする必要はありません。
+ のメタ文字を使うことができます。
→ 互換性
サンプル
Set c = g_VBS_Lib
founds = grep( "-r -l ""define"" ""..\FolderA\*""", c.NotEchoStartCommand )
For Each found In founds
echo found.Path
Next
ファイル・パスの一覧を得る（-l オプション）
OutPath 引数と返り値
g_VBS_Lib.NotEchoStartCommand を指定すると、見つかった場所について、echo 表示しなく
なります。
単語単位はできません。
-u オプションがなければ、内部で、コマンドプロンプトの findstr コマンドを使用します。
-u オプションがあれば、内部で、VBScript.RegExp を使用します。
ソース
→ vbslib.vbs
→ FindStringLines
キーワードがある行だけ抽出します。
ただし、オプションは、-r と -i と -l と --include のみ指定できます。
-r : サブフォルダーも検索対象にする
-i : 大文字と小文字を区別しないで検索する
-l : キーワードを含むファイルのパスのみ出力する
-L : キーワードを含まないファイルのパスを出力する
-c : キーワードを含む行の数を取得するだけのため、返り値の LineNum を求める処理をしない
--include : 拡張子を指定する
のパラメーターと同じです。
grep コマンド
-u オプション（vbslib オリジナル）を指定しないと、Unicode テキストにはヒットしません。
→ grep コマンド (Linux)
→ GrepKeyword
関連
\ 文字は bash を経由したときと同じになります。
つまり、\\ が \ に、\" が " に置き換わった後の文字列が、正規表現に適用されます。
例：
\(
を指定すると、一般文字の（制御文字でない）
\\(
(
\\\\
を指定すると、一般文字の（制御文字でない）
\
または
OutPath 引数に 検索結果の出力先のファイル・パスを指定すると、
例：
結果をファイルに出力する
下記のサンプル
表示され、返り値は Empty になります。 返り値を GrepFound オブジェクトの配列にしたい
ときは、OutPath 引数に Empty を指定してください。
のように
RunProg
同様、
EchoOff オブジェクト
を使ったり、OutPath 引数に
の配列、または Empty
-u オプションを指定したときは、内部で
VBScript.RegExp
が使われます。
ExpandWildcard_Sort 変数
が使えます。 ただし、-u オプションが付いていないと無視されます。
テキストファイルだけを検索対象にする
サンプル
Set ds = new CurDirStack
extensions = g_Vers("TextFileExtension").Keys
extensions = CSVFrom( extensions )
extensions = Replace( extensions, ",", " *." )
extensions = Left( "*." + extensions, Len( extensions ) )
cd "..\FolderA"
founds = grep( "-r ""define"" "+ extensions, Empty ) '// as array of GrepFound
For Each found In founds
echo found.Path
Next
-u オプションがなければ、内部で、コマンドプロンプトの findstr コマンドを使用します。
なぜなら、
findstr
で表示しながら検索するため。
← ▼ ▲
SortGrepFoundArray
Sub SortGrepFoundArray( Founds as array of GrepFound )
GrepFound クラスのオブジェクトの配列をソートします。
【引数】
Founds
GrepFound クラスのオブジェクトの配列
GrepFound
ソース
→ vbslib.vbs
関連
→ ExpandWildcard_Sort 変数
← ▼ ▲
GrepClass
→ T_Grep.vbs
テスト
ソース
→ vbslib.vbs
T_GrepClass1
T_Grep1 の *_U (grep -u の内部で使っている）
ファイルの中で、指定したキーワードを含む行を検索します。
.IsRecurseSubFolders
サブ・フォルダーも再帰的に検索対象にする。
Execute の TargetPath 引数に PathDictionaryClass
を指定したときは、無視されます
.IsOutFileNameOnly
boolean
boolean
ファイル名のみ出力する
.IsInvertMatch
キーワードにマッチしないものを出力する
boolean
.IsHitCount
LineNum を求める処理をしない
boolean
.IgnoreCase
.Pattern
string
boolean
検索キーワード
（正規表現）
大文字小文字を区別しないかどうか
.Execute
Function
指定したファイルの中に対して、検索を実行する
\ は、bash を経由しないときと同じになります。
"" を指定すると .IsOutFileNameOnly = True なら、
すべてのファイルを検索結果に含めます。
VBScript.RegExp
にあるメンバーと同じものは、同じ名前にしています。
サンプル
Set a_grep = new GrepClass
a.grep.Pattern = "</?xml>"
founds = a_grep.Execute( "folder\*.txt" )
← ▼ ▲
Execute (GrepClass)
Function GrepClass::Execute( TargetPath as variant ) as array of GrepFound
ファイルの中で、指定したキーワードを含む行を検索します。
【引数】
TargetPath
検索対象フォルダーやワイルドカード（複数可）、または
返り値
GrepFound オブジェクト
GrepFound
の配列、または Empty
PathDictionaryClass
<< GrepClass
TargetPath 引数は、
VBScript.RegExp
の Execute メソッドの引数と異なります。
サンプル
founds = a_grep.Execute( "folder\*.txt" )
founds = a_grep.Execute( Array( "folder_A\*.txt", "folder_B\*.txt" ) )
paths = ArrayFromWildcard( "folder" )
paths.AddRemove "folder\.svn"
founds = a_grep.Execute( paths )
← ▼ ▲
ToRegExpPattern
Function ToRegExpPattern( NotEscapedString as string ) as string
egrep 仕様・VBScript 仕様の正規表現で使われるメタ文字も検索できるように変換します。
【引数】
NotEscapedString
メタ文字も含む可能性がある検索キーワード
返り値
メタ文字をエスケープした検索キーワード
Assert ToRegExpPattern( "[0](1)\" ) = "\[0\]\(1\)\\"
サンプル
→ VBScript.RegExp
参考
ソース
→ GrepKeyword
関連
→ T_Grep.vbs # [T_GrepKeyword]
テスト
→ vbslib.vbs
→ 正規表現
→ 互換性 （正規表現）
ToOldRegExpPattern
Function ToOldRegExpPattern( NotEscapedString as string ) as string
grep 仕様の正規表現で使われるメタ文字も検索できるように変換します。
Assert ToOldRegExpPattern( "[0](1)\" ) = "\[0\](1)\\"
ToRegExpPattern
→ vbslib.vbs
ToOldRegExpPattern
← ▼ ▲
GrepKeyword
EGrepKeyword
Function GrepKeyword( NotEscapedString as string ) as string
検索キーワードを grep や egrep のコマンドラインに指定する形式に変換します。
【引数】
NotEscapedString
返り値
検索キーワード
grep や egrep のコマンドラインに指定する形式
Function EGrepKeyword( NotEscapedString as string ) as string
返り値を grep や egrep のパラメーターに指定するときは、" " で囲んでください。
' ' で囲まないでください。 なぜなら \ がコマンドラインのエスケープ開始文字ではなく
なるからです。
Assert GrepKeyword( "---\" ) = "\---\\\\"
grep -r "\---" *
(src)
(src)
→ T_Grep.vbs # [T_GrepKeyword]
テスト
サンプル
GrepExpression
(src)
Function GrepExpression( RegularExpression as string ) as string
RegularExpression
正規表現
RegularExpression 引数に指定した \ 文字は bash を経由しないときと同じになります。
例： \\\\ = \ 文字が２つをキーワードとする
RegularExpression 引数の先頭に、- を指定したときにオプションと扱われないように、
先頭に \ が付いたものが返ります。
RegularExpression 引数
Assert GrepExpression( "---\" ) = "\---\\"
Assert GrepExpression( "abc[A-Z]\def" ) = "abc[A-Z]\\def"
Assert GrepKeyword( "abc[0]\def" ) = "abc\\[0\\]\\\\def"
関連
→ ToRegExpPattern
← ▼ ▲
find
Function find( keyword as string, path as string ) as string
テキストファイルの中で、指定したキーワードを含む行をまとめて返します。
【引数】
keyword
検索するキーワード
キーワードを含む行、または複数行
返り値
path
テキストファイルのパス
(src)
サンプル：
lines = find( "<ERROR", "Test_logs.txt" )
Test_logs.txt ファイルのサンプル
start main.vbs
<ERROR msg='not found symbol'/>
Fail.
返り値のサンプル
<ERROR msg='not found symbol'/>
関連
→ FindStringLines
← ▼ ▲
find_c
Function find_c( keyword as string, path as string ) as integer
テキストファイルの中で、指定したキーワードを含む行数を返します。
【引数】
keyword
path
検索するキーワード
テキストファイルのパス
キーワードを含む行数
返り値
(src)
← ▼ ▲
SearchStringTemplate
テスト
→ T_fc.vbs
Function SearchStringTemplate( FolderPath as string, RegularExpressionPart as string,
TemplateStrings as array of string, Opt as Empty ) as array of array of GrepFound
テキストファイルの中をキーワードで検索し、どのテンプレートと一致するかを一覧します。
【引数】
FolderPath
RegularExpressionPart
検索対象フォルダーやワイルドカード
テンプレートの中にあるキーワード。複数行不可
TemplateStrings
テンプレート（複数行可）、または、その配列
返り値
→ 正規表現
GrepFound オブジェクト
の配列の配列
→ ToolsLib.vbs
ソース
T_SearchStringTemplate
関連
→ PartCmp
founds = SearchStringTemplate( "TargetFolder", "(((", _
"/***********" +vbCRLF+ _
"((( ${FunctionName} ))$\{)" +vbCRLF+ _
"************/" +vbCRLF, Empty )
Assert founds(0)(0).LineNum = 1 '// マッチした
Assert founds(0)(1).LineNum = 5 '// マッチした
Assert founds(1)(0).LineNum = 9 '// マッチしなかった
サンプル
TargetFolder フォルダーの中にあるテキストファイルの中から "(((" を検索し、見つかった
位置に、テンプレート（下記の複数行の文字列） がマッチしているものと、マッチしていない
ものに分けます。
/***********
((( FuncA ))${)
************/
/***********
((( FuncB ))${)
************/
/***********
((( FuncC )))
************/
検索対象のテキストファイル
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
… RegularExpressionPart 引数に指定した ((( にヒットするが、
テンプレートに指定した ${ がないのでマッチしない
キーワードが見つかった位置が、指定したテンプレートの一部であるものと、そうでないものを
一覧します。 これを応用すれば、テンプレートの内容が違っていたり、古いテンプレートのまま
になっていたりするものを見つけることができます。
テンプレートは、可変の部分を "${変数名}" のように記述してください。 可変の部分は、複数行
にまたぐことができます。 SearchStringTemplate 関数はテンプレートの中の変数名を無視しま
すが、テンプレートを ScanFromTemplate 関数などにそのまま渡すことができます。
${ 文字は "$\{" と記述してください。 $\ 文字は "$\\" と記述してください。
関数名： ${FunctionName}
引数： ${Arguments}
返り値： ${RerutnValue}
→ ScanFromTemplate
Opt
Empty を指定してください
→ ReplaceStringTemplate
返り値が founds のとき、founds(t)(i) の t は TemplateStrings 引数の配列番号、i はテンプレート
にマッチした複数の場所に 0 から順番につけた番号です。
i が配列の要素数に一致する要素は、TemplateStrings 引数に指定したどのテンプレートにも
マッチしなかったテキストについてです。
→ GetLineNumOfTemplateDifference
返り値
TemplateStrings 引数
→ Execute (GrepClass)
→ EchoOld (ReplaceTemplateClass)
GrepFound オブジェクト
配列の要素は、
です。
GrepFound オブジェクトのメンバー変数の内容は、次の通りです。
.Path
.LineNum
.LineText
ファイル名
Empty
Array( テンプレートの開始位置（1以上）, テンプレートの次の位置 )
GetEchoStr に渡すと、次のように変わります。
テンプレートにマッチしたファイルの中の内容。 複数行の場合あり
行番号。 キーワードがある位置の行番号
ファイル名
.LineText
.LineNum
.Path
ExpandWildcard_Sort 変数
が使えます。
←
↓