←
▼
▲
(src)
Sub mkdir_for( FilePath as string )
指定のファイルを作成するためのフォルダを作成します。 ファイルは作成しません。
【引数】
FilePath
ファイルのパス
mkdir_for "sub\file1.txt"
sub\file1.txt ファイルを格納する sub フォルダを作成します。
→ T_File.vbs # [T_MkDir]
テスト
vbslib
モジュール・シンボル:
サンプル
←
▼
▲
Sub rmdir( Path as string )
フォルダーを削除します。
del でも、rmdir と同じようにフォルダを削除できます。
(src)
【引数】
Path
削除するフォルダーのパス
vbslib
モジュール・シンボル:
rmdir "sub"
サンプル
テスト
→ T_Copy.vbs # [T_Del]
関連
←
▼
▲
Function exist( path as string ) as boolean
フォルダまたはファイルが存在するかどうかを返します。
If exist( "file1.txt" ) Then ...
ワイルドカードを指定することもできます。
関連
参考
サンプル
テスト
→ T_File.vbs # [T_Exist]
ソース
→ vbslib.vbs
←
▼
▲
Function fc( PathA as string, PathB as string )
ファイル、またはフォルダが同一かどうかを比較します。
【引数】
PathA
PathB
比較するファイルパスA、またはフォルダパスA
比較するファイルパスB、またはフォルダパスB
返り値
同一=True
サンプル:
Assert fc( "result.txt", "ans.txt" )
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
(src)
標準出力: ファイルの内容が同じだったとき
fc "result.txt", "ans.txt"
same.
fc "result.txt", "ans.txt"
different.
標準出力: ファイルの内容が違ったとき
標準出力: フォルダの内容が同じだったとき
fc "folder1", "folder2"
same.
標準出力: フォルダの内容が違ったとき
fc "folder1", "folder2"
Not found "sub\file1.txt" in "folder1"
Not found "sub2" in "folder2"
Not same "sub\file2.txt"
different.
参考
If not fc( "result.txt", "ans.txt" ) Then raise E_TestFail,""
→ T_fc フォルダ
テスト
ソース
→ feq フォルダー
feq.exe のソース
→ T_feq フォルダー
←
▼
▲
テスト
テキスト・ファイルを比較します。 文字コードや改行文字が異なっていても構いません。
Function IsSameTextFile( PathA as string, CharSetA as string,
PathB as string, CharSetB as string, Opt as integer ) as boolean
【引数】
PathA
CharSetA
比較するファイル A のパス
比較するファイル A の文字コードセット (*1)
返り値
2つのファイルの内容が同じかどうか
比較するファイル B の文字コードセット (*1)
比較するファイル B のパス
CharSetB
PathB
(*1)
文字コードについては、
ただし、BOM があるときや、Shift JIS のときは、Empty を指定できます。
サンプル
Assert IsSameTextFile( "FileA.txt", Empty, "FileB.txt", "EUC-JP", Empty )
Opt
オプション、または Empty
(src)
→ T_fc.vbs # [T_IsSameTextFile]
関連
Opt 引数
PathA のファイルにある空行は比較しない
c は、g_VBS_Lib の返り値です。
PathB のファイルには、
を含む
→ T_fc.vbs # [T_IsSameTextFileRegExp]
c.ErrorIfNotSame
内容が異なっていたら、エラーにする
←
▼
▲
バイナリ・ファイルを比較します。
Function IsSameBinaryFile( PathA as string, PathB as string, Opt as integer ) as boolean
【引数】
PathA
比較するファイル A のパス
返り値
2つのファイルの内容が同じかどうか
比較するファイル B のパス
PathB
Opt
Empty
サンプル
Assert IsSameBinaryFile( "FileA.jpg", "FileB.jpg", Empty )
(src)
テスト
→ T_fc.vbs # [T_IsSameBinaryFile]
関連
→ FileT_isSameBinaryFile (clib)
PathA または PathB にファイルが存在しないときは、エラーになります。
←
▼
▲
Function fc_r( path_a as string, path_b as string, redirect_path as string ) as boolean
ファイルやフォルダの内容が同じかどうか調べます。
【引数】
path_a
path_b
1つ目のファイルのパス、またはフォルダのパス
2つ目のファイルのパス、またはフォルダのパス
redirect_path
調べた結果の詳細の出力先のファイルパス、Empty、"nul" 可
返り値
同じかどうか
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
(src)
redirect_path の値
出力先
その他
"nul"
なし
Empty
なし
""
標準出力
ファイル
出力内容については、
←
▼
▲
Function fc_ex( PathA as string, PathB as string, Opt as fc_option ) as boolean
ファイルやフォルダの内容が同じかどうか調べます。
【引数】
PathA
1つ目のファイルのパス、またはフォルダのパス
Opt
Empty または オプション
返り値
同じかどうか
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
PathB
2つ目のファイルのパス、またはフォルダのパス
Class fc_option
Public FcOptionIniPath
Public FcResultRedirectPath
Public m_bStdOut
Public IsStartDiffIfNotSame
Public IsXmlComparedAsBinary
End Class
オプション指定ファイル fc.ini のパス
FcOptionIniPath、オプション指定ファイル fc.ini
[Excludes]
A = obj
A = proj\Debug
: :
比較を行わないファイルの一覧
未対応
IsStartDiffIfNotSame
違いが発見されたら、diff を起動。 起動したら、False になります
diff ツールは、
で設定します。
結果を出力するファイルのパス
未対応
未対応
XML として同じでも、テキストが異なれば、異なると判定する
IsXmlComparedAsBinary
False なら、文字コードや空白文字などの違いがあっても、XML ドキュメントのデータが同じであれば
同じと判定します。
デフォルト(Empty)は True です。
→ T_XML.vbs # [T_CompareXml]
テスト
(src)
←
▼
▲
set_fc_option( new fc_option ).m_bStartDiff = True
If not fc( file_a, file_b ) Then Fail
If not fc( file_a, file_c ) Then Fail
set_fc_option Empty
Function set_fc_option( opt as fc_option ) as fc_option
のオプションを設定します。 デバッグ用です。
サンプル: fc で違いが発見されたら、そのファイルに対して diff を起動します。
このオプションは、fc, fc_r, fc_ex のすべてに設定され、set_fc_option Empty するまで有効です。
返り値は、opt 引数がそのまま返ります。
←
▼
▲
複数のフォルダーにある複数のファイルの差分を調べて、Diff ツールやテキスト・エディターを
開くメニューを表示することで、手動でファイルの内容を同じにする作業を支援します。
.AddRootFolder
Function AddRootFolder( IndexNum, RootFolderPath )
.AddFile
.IsCompareTimeStamp
.IsCompareContents
.Compare
Sub Compare()
Sub AddFile( StepPath )
boolean
boolean
Sub OpenSyncMenu()
→ T_SyncFiles.vbs # main
テスト
(src) SyncFilesMenuLib.vbs
.IsSameFolder
Function IsSameFolder( FolderAIndexNum, FolderBIndexNum )
サンプル・コード
Set menu = new SyncFilesMenu
menu.IsCompareTimeStamp = False
menu.Lead = "Comparing Base, Update1 and Update2"
menu.AddRootFolder 0, "Folder0"
menu.AddRootFolder 1, "Folder1"
menu.AddRootFolder 2, "Folder2"
menu.RootFolders(0).Label = "Base"
menu.RootFolders(1).Label = "FolderA"
menu.RootFolders(2).Label = "FolderB"
menu.AddFile "File1.txt"
menu.AddFile "File2.txt"
menu.AddFile "File3.txt"
menu.Compare
menu.OpenSyncMenu
→ Syncs
関連
データ構造
SyncFilesRoot<array>
.StepPath
.AbsPath
.Files( Key:StepPath )
SyncFilesFile<dic>
SyncFilesMenu
.RootFolders( Index:Num )
.IsSameBinary[ n ]
string
string
boolean
Comparing Base, Update1 and Update2
1. NotSame.txt : Base≠FolderA, Base≠FolderB, FolderA≠FolderB
2. NotSameNo0.txt : Base に存在しません, FolderA≠FolderB
3. Only0.txt : Base のみに存在します
4. SameAll.txt : 同じ内容
99. 戻る
ファイルの番号を入力してください >1
NotSame.txt
1. Diff ツールを開く
4. Base のファイルを開く
5. FolderA のファイルを開く
6. FolderB のファイルを開く
99. 戻る
操作の番号を入力してください >
サンプル画面
比較するファイルは、AddFile メソッドを使って1つ1つ指定してください。
(src)
(src)
(src)
(src)
(src)
.IsCallViaFile
boolean
CallViaFile を呼ぶメニュー 80 を追加するかどうか
.RootFolders(i).Label
ラベル。 i は、AddFile の FileNum
ファイルが同じかどうかは、ReadFile の返り値が同じかどうかで判定します。
親フォルダーの指定を、サブ・フォルダーに置き換える
←
▼
▲
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)
←
▼
▲
%AbsPath(..\SampleLib)%
変換前
変換後の例
C:\folder\SampleLib
%DesktopPath%
C:\Documents and Settings\user1\デスクトップ
vbslib の提供するいくつかの関数の中で、% を使った文字列変換関数が使えます。
% を使った環境変数も展開されます。
%AbsPath(.)%
C:\folder\current
の c.RightHasPercentFunction
(*1)
(*2)
(*1)
(*2)
○
○
×
○
○
○
○
○
%RegExp(.*)%
正規表現にマッチする任意の文字列
比較対象も指定する関数で使えるかどうか。
例:
例:
比較対象を指定しない関数で使えるかどうか。
サンプル
ABC
***%AbsPath(.)%***
***%RegExp(.*)%***
ABC
***C:\FolderA***
***01234567879***
展開
%MultiLine%〜
×
○
複数行にマッチする (*3)
(*3)
関数一覧
%MultiLine% は、任意の複数行とマッチします。
また、%MultiLine% の直後にテキスト(%を使った関数可能)を置くと、その複数行が
マッチするかどうかをチェックします。
start
%MultiLine%
end
start
Line1
Line2
Line3
end
展開
展開
start
C:\FolderA>
C:\FolderA>
C:\FolderA>
end
start
%MultiLine%%AbsPath(.)%>
end
←
▼
▲
(src)
Function grep( Parameters as string, OutPath as string ) as array of GrepFound
ファイルの中で、指定したキーワードを含む行を検索します。
【引数】
Parameters
OutPath
オプションと、キーワードと、検索対象フォルダー
Empty または 検索結果の出力先のファイル・パス
返り値
GrepFound オブジェクトの配列、または Empty
ファイル:
vbslib.vbs
Dim founds, found
founds = grep( "-r ""define"" ""..\FolderA\*""", Empty ) '// as array of GrepFound
'// 返り値のサンプル
'// UBound( founds ) は、見つかった行数−1
'// 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 は、grep コマンドのパラメーターと同じです。
\ によるエスケープは bash と同じです。
ただし、オプションは、-r と -i と --include のみ指定できます。
-r : サブフォルダーも検索対象にする
-i : 大文字と小文字を区別しないで検索する
キーワードは、必ず
OutPath に 検索結果の出力先のファイル・パスを指定すると、返り値は Empty になります。
サンプル
"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", "grep_out.txt"
grep_out.txt ファイルのサンプル
"define" を検索する。 結果は、"grep_out.txt" ファイルに出力する。
検索対象ファイルは、拡張子が .txt で、サブ・フォルダーも含める。(-r)
大文字小文字は区別しない。(-i)
で指定してください。
正規表現
→ 正規表現
→ T_Grep.vbs # [T_Grep1]
テスト
参考
関連
文字列の途中を取り出します。
Parameters に指定した検索対象のパスが、相対パスなら、Path プロパティも
相対パスになります。 そのときの基準フォルダーは、カレント・フォルダーになります。
GrepFound::Path プロパティ
\*
互換性
"|" (バーチカルライン)は、OR の意味になります。
"|" を検索したいときは、"\|" のようにエスケープしてください。
"-" を検索したいときは、"\-" のようにエスケープしてください。
"/"(スラッシュ)は、一般文字であり、エスケープする必要はありません。
→ 互換性
未確認
キーワードがある(ない)行だけ抽出します。
←
▼
▲
Function GrepKeyword( Keyword as string ) as string
検索キーワードを grep や egrep のコマンドラインに指定する形式に変換します。
【引数】
Keyword
返り値
検索キーワード
grep や egrep のコマンドラインに指定する形式
Function EGrepKeyword( Keyword as string ) as string
返り値を grep や egrep のパラメーターに指定するときは、" " で囲んでください。
Assert GrepKeyword( "---" ) = "\---"
grep -r "\---" *
(src)
(src)
→ T_Grep.vbs # [T_GrepKeyword]
テスト
サンプル
←
▼
▲
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'/>
←
▼
▲
Function find_c( keyword as string, path as string ) as integer
テキストファイルの中で、指定したキーワードを含む行数を返します。
【引数】
keyword
path
検索するキーワード
テキストファイルのパス
キーワードを含む行数
返り値
(src)
←
▼
▲
Sub type_( Path as string )
テキストファイルの内容を表示します。
【引数】
Path
表示するファイルのパス
type は、VBScript の予約語なので、type の後に末尾にアンダースコアを付けた名前にしています。
type_ "result.txt"
サンプル:
参考
←
▼
▲
Function ReadFile( Path as string ) as string
テキストファイルの全体を読み込みます。
【引数】
Path
返り値
読み込むテキストファイルのパス
テキストファイルの内容
ファイルが存在しないときでもエラーにならず、"" を返します。
エラーにするときは次のようにします。
多くの場合、行末に改行文字があります。 ReadFile で取得した末尾に
改行文字があることに注意してください。
Text1
ReadFile( "a.txt" ) = "Text1"+vbCRLF
a.txt
(src)
で作成したファイルは、改行文字は付きません。
t = ReadFile( "a.txt" )
サンプル:
Dim f
Set f = OpenForRead( "a.txt" )
t = ReadAll( f )
→ T_File.vbs # [T_ReadFile]
関連
テスト
文字コードを指定するときは、
を使って
ください。 ただし、Shift-JIS, Unicode, UTF-8(BOMあり) は、使わな
くても自動的に文字コードを判定して、正しく読み込みます。
Set cs = new_TextFileCharSetStack( "EUC-JP" )
t = ReadFile( "a.txt")
cs = Empty
mini (src)