(for Internet Explorer)
← ▼ ▲
↑
EnumFileObjectDic
(src)
フォルダの中のファイル・オブジェクトを高速に辞書に列挙します。
【引数】
out_Files
FolderOrPath
（出力） ファイルのオブジェクトの辞書
調べるフォルダのパス。 または、Folder オブジェクト（高速）
Sub EnumFileObjectDic( FolderOrPath as string or Folder, out_Files as dictinoary of File
out_Files は辞書型です。 キーは、ファイル名です。 アイテムは、File オブジェクトです。
サブ・フォルダーにあるファイルは列挙しません。
Dim files1, files2, file_name
EnumFileObjectDic "C:\FolderA", files1 '// [out] files1
EnumFileObjectDic "C:\FolderB", files2 '// [out] files2
For Each file_name In files1.Keys
If not files2.Exists( file_name ) Then
copy "C:\FolderA\"+ file_name, "C:\FolderB"
End If
Next
サンプル
EnumFileObjectDic
EnumFileObjectDic
File
関連
→ EnumFolderObjectDic
→ Dic_addFilePaths_fromPathDirectory
→ LeafPathDictionary
← ▼ ▲
EnumFolderObject
Sub EnumFolderObject( FolderPath as string, out_Folders as array of Folder )
サブ フォルダーのオブジェクトを高速に列挙します。 サブ フォルダーのサブ フォルダーも列挙します。
【引数】
out_Folders
FolderPath
（出力） サブフォルダのオブジェクトの配列
調べるフォルダのパス。 このフォルダの中から列挙します
→ ExpandWildcard
(src)
Set fname_key = new StrMatchKey
fname_key.Keyword = LCase( "*.txt" )
EnumFolderObject "C:\FolderA", folders '// Set "folders"
For Each fo In folders '// fo as Folder
For Each fi In fo.Files '// fo as File
If fname_key.IsMatch( fi.Name ) Then
echo fi.DateLastModified
End If
Next
Next
関連
→ ファイルを一覧するときの速度
out_Folders には、FolderPath の Folder オブジェクトと、FolderPath のサブ フォルダーの Folder
オブジェクトの両方が含まれます。
サンプル
EnumFolderObject
Folder
サブ・フォルダーを列挙しない場合
→ Folder::SubFolders
性能
サンプル
EnumFolderObject "C:\FolderA", folders '// Set "folders"
For Each folder In folders '// folder as Folder Object
For Each file In folder.Files '// file as File Object
echo file.Path
Next
Next
EnumFolderObject
→ Folder オブジェクト
→ File オブジェクト
→ EnumFolderObjectDic
→ EnumFileObjectDic
→ ファイルを一覧するときの速度
← ▼ ▲
GetSubFolders
Sub GetSubFolders( folders as array of string, path as string )
サブ フォルダーのパスを列挙します。 サブ フォルダーのサブ フォルダーも列挙します。
【引数】
folders
path
（出力） サブ フォルダーのパスの配列
調べるフォルダーのパス。 このフォルダーの中から列挙します
→ ExpandWildcard
関連
(src)
← ▼ ▲
その他
→ Dic_searchChildren
フォルダーに入っているファイルを一覧することに近い処理を辞書で行います。
→ ExpandWildcard_Sort 変数
一覧するときに名前で並べ替えるかどうか
→ QuickSortDicByKey
辞書を名前で並べ替える
← ▼ ▲
MD5 リスト
フォルダーの中にあるすべてのファイルの
MD5 （ハッシュ値の一種）
を一覧したテキストファイル。
作成したフォルダー(A)の内容が、以前固定したフォルダー(B)の内容と同じであるかどうかを
チェックするとき、フォルダー(B)に対応する MD5 リストと呼ばれるテキストファイルがあれば、
フォルダー(B) がなくてもチェックができます。
参考
圧縮ファイルを展開したフォルダーやパッチをあてたフォルダーが正しく復元できたことを保証できます。
→ 窓の杜 - CRCMD5リストを一括作成や連続比較して結果をタブで切り替え表示するソフト (Web)
→ ハッシュ値を利用してファイルの同一性をチェックする − ＠IT (Web)
MD5 リスト
復元したフォルダー
チェック
→ MakeFolderMD5List 関数
→ CheckFolderMD5List 関数
FileA.txt
FileB.txt
fadc3390060b1ba5ef3bef593b7c930d FileA.txt
60631deb298f23dc7e3a4ada23d8372c FileB.txt
ファイル名
（相対パス）
MD5
→ MD5List コマンド
→ NotExistFileMD5
関連
ファイルが存在しないとき
_FullSet.txt ファイル、ExistingFiles.txt ファイル
_FullSet.txt ファイルが存在するフォルダーは、その中の一部のファイルが存在しない可能性が
ありますが、修復することがおそらく可能です。 _FullSet.txt ファイルの内容は MD5リストです。
存在するファイルに関する MD5リスト（ファイル名の例： ExistingFiles.txt）から同じハッシュ値（MD5）
のファイルを探し、存在すればコピーして修復できます。
→ OpenForDefragment
MD5
ファイル名
（相対パス）
2015-12-28T11:13:34+09:00 fadc3390060b1ba5ef3bef593b7c930d FileA.txt
2016-02-20T11:01:04+09:00 60631deb298f23dc7e3a4ada23d8372c FileB.txt
MD5 リスト、タイムスタンプ付き
タイムスタンプ
W3C-DTF 形式
→ CopyFolder (OpenForDefragmentClass)
参考
他にもあります。
→ OpenForDefragment 関数
_FullSet.txt ファイルが存在するフォルダーから、別のフォルダーにコピーするとき、コピー元を修復
しなくても、コピー先を完全なフォルダーにすることができます。
参考
→ MD5List コマンド
の Fragment と Deｆragment。
関連
→ MD5List コマンド
→ 空のフォルダーの MD5
空のフォルダーも MD5 リストに含めます。 その MD5 値は、0が32文字です（vbslib の仕様）。
また、その値は、get_ToolsLibConsts().EmptyFolderMD5 から参照できます。 タイムスタンプ
は、常に2001-01-01T00:00:00+00:00 （vbslib の仕様）で、
get_ToolsLibConsts().EmptyFolderTimeStamp から参照できます。
MD5 リスト
2001-01-01T00:00:00+00:00 00000000000000000000000000000000 EmptyFolder
VBScript
Set tc = get_ToolsLibConsts()
If hash_value = tc.EmptyFolderMD5 Then _
:
If time_stamp = tc.EmptyFolderTimeStamp Then _
:
EmptyFolderMD5
EmptyFolderTimeStamp
空のフォルダーの MD5
の１行
NotExistFileMD5 (g_VBS_Lib_System)
も 0が32文字です（vbslib の仕様）。
ただし、
← ▼ ▲
MakeFolderMD5List
Sub MakeFolderMD5List( in_FolderPath as string, in_MD5ListFilePath as string, in_Option )
後でフォルダーが正しく復元できたかどうかをチェックできるように、MD5 リストを作成します。
【引数】
in_FolderPath
in_MD5ListFilePath
対象のフォルダーのパス、またはその辞書
作成する MD5 リストのファイルパス
関連
テスト
ソース
→ CheckFolderMD5List
T_MD5List
→ T_fc.vbs
→ ToolsLib.vbs
<< MD5 リスト
ファイル名が Ascii 文字だけのときは、Ascii 形式テキストファイルができます。
Ascii 文字以外が含まれるときは、Unicode 形式テキストファイルができます。
空のフォルダーも列挙します。 その MD5 値は、0が32文字です（vbslib 新仕様）。
in_FolderPath 引数 - 複数の対象フォルダー
複数の対象のフォルダーに対する MD5リストを１つのファイルに出力するときは、
in_FolderPath 引数に辞書型を指定します。
・Key: MD5リストに含まれるパスの左に付ける文字列
・Item: 対象のフォルダーのパス
202cb962ac59075b964b07152d234b70 %A%\example.txt
fd758aae4cede6a4d6e44ef59b18e799 %B%\example.txt
MD5List.txt:
MakeFolderMD5List "C:\Target", "MD5List.txt", Empty '// Write to "MD5List.txt"
サンプル
MakeFolderMD5List Dict(Array( "%A%\", "C:\TargetA", "%B%\", "C:\TargetB" )), _
"MD5List.txt", Empty
サンプル
対象フォルダーに含まれる MD5リスト
→ Save (MD5CacheClass)
in_Option
対象フォルダーの中に MD5リストを作成することはできますが、
そのMD5リストの中に作成しようとしている MD5リストを含めることはできません。
なぜなら、MD5リストのMD5が作成する前のMD5になってしまうからです。
in_Option 引数
Empty
パスでソートします。
MD5 リストの中の相対パスの基準フォルダーは、in_FolderPath 引数の値です。
tc.IncludeFullSet
tc.FasterButNotSorted
ソートしません。 やや高速に処理します。
CheckFolderMD5List
に使えなくなります。
OpenForDefragment
には使えます。
CheckFolderMD5List
OpenForDefragment
とも使えなくなります。
があるフォルダーは、ファイルを列挙せず _FullSet.txt の内容を読みます。
tc.FasterButNotSorted と or で同時に指定してください。
_FullSet.txt
tc.TimeStamp
MD5 リストにファイルの更新日時も含めます。
tc は、get_ToolsLibConsts() です。
SortFolderMD5List
で使えるようになります。
tc.BasePathIsList
MD5 リストの中の相対パスの基準フォルダーは、in_MD5ListFilePath 引数の値の
親フォルダーです。
指定しなかったときの基準フォルダーは、in_FolderPath 引数の値です。
→ in_Option 引数
Empty または、下記の論理和を指定します。
→ UpdateFolderMD5List
← ▼ ▲
CheckFolderMD5List
Sub CheckFolderMD5List( in_TargetFolderPath as string, in_CorrectMD5ListFilePath as string,
in_Option as Empty or variant )
MD5 リストを使って、フォルダーが正しく復元できたかどうかをチェックします。
【引数】
in_TargetFolderPath
in_CorrectMD5ListFilePath
チェック対象の（復元した）フォルダーのパス、またはその辞書
MD5 リストのファイルパス
関連
テスト
正しく復元できていれば、そのまま関数から返ります。
正しく復元できていなければ、Diff ツールで差分が表示され、エラーになります。
AssertFC
→ MakeFolderMD5List
T_MD5List
→ T_fc.vbs
<< MD5 リスト
ソース
→ ToolsLib.vbs
in_Option
Empty または get_ToolsLibConsts().BasePathIsList
と同じ動きです。
これは、
MakeFolderMD5List
in_TargetFolderPath 引数は、
と同様に辞書（複数の対象フォルダー）を指定できます。
Diff ツールの左側がファイルにある（過去の）MD5リスト、右側が現在のフォルダーの MD5リストです。
対象フォルダーに含まれる MD5リスト
対象のフォルダーの中に MD5リストがあるときは、そのMD5リストの中にはそのMD5リスト
ファイルの MD5が含まれていません。 なぜなら、MD5リストのファイルの MD5 を含んだ
→ IsSameHashValueOfLeafPathDictionary (MD5CacheClass)
MD5リストができないからです。
→ MakeFolderMD5List
CheckFolderMD5List 関数は、MD5リストの有無と、MD5リスト自身のハッシュ値の正しさに
ついては、チェックしません。
in_CorrectMD5ListFilePath 引数にタイムスタンプ付き MD5 リストを指定したとき、タイムスタンプが
異なっていてもエラーにはなりません。
in_Option 引数
Empty
パスでソートします。 ソートするのは内部でチェック対象のフォルダーから一時的に作成する
MD5リストです。 in_CorrectMD5ListFilePath 引数に指定した MD5リストは、ソートされます。
tc.BasePathIsList
MD5 リストの中の相対パスの基準フォルダーは、in_MD5ListFilePath 引数の
親フォルダーです。
MD5 リストの中の相対パスの基準フォルダーは、in_FolderPath 引数です。
c.TimeStamp
c は、g_VBS_Lib です。 tc は、get_ToolsLibConsts() です。
正しく復元できていたら、ファイルのタイムスタンプを MD5リストに書かれた日時に変更します。
← ▼ ▲
IsSameMD5List
Function IsSameMD5List( in_MD5ListFilePathA as string, in_MD5ListFilePathB as string,
in_Option as Empty or variant)
２つの MD5 リストの中のハッシュ値だけを比較して同じかどうかを返します。
【引数】
in_MD5ListFilePathA
in_MD5ListFilePathB
MD5 リストのファイルパス
比較するもう１つの MD5 リストのファイルパス
<< MD5 リスト
in_Option
Empty または g_VBS_Lib.EchoV_NotSame
返り値
ハッシュ値が等しいかどうか
MD5 リストの中に記録されたタイムスタンプは、比較に使われません。
MD5リストの行の順番だけが違うときは、等しいと判定します。
ソース
→ ToolsLib.vbs
→ CheckFolderMD5List
テスト
in_Option = g_VBS_Lib.EchoV_NotSame を設定すると、違った行を表示します。
← ▼ ▲
SortFolderMD5List
Sub SortFolderMD5List( in_InputMD5ListFilePath as string, in_OutputMD5ListFilePath as string,
in_Option as Empty )
MD5 リストを、相対パスでソートします。
【引数】
in_InputMD5ListFilePath
in_OutputMD5ListFilePath
ソートする前の MD5 リストのファイルパス
ソートした後の MD5 リストのファイルパス
→ T_fc.vbs
T_SortFolderMD5List
テスト
ソース
→ ToolsLib.vbs
Empty を指定してください
in_Option
重要なファイルを上書き更新するときは、SortFolderMD5List の in_OutputMD5ListFilePath 引数に
一時的に出力するパスを指定し、その一時ファイルを作成した後（ファイルを閉じた後）で、
SafeFileUpdateEx
を呼び出してください。
改行文字は、CR+LF に統一されます。
ソートするときに使う比較関数は、
PathNameCompare
です。
関連
→ ExpandWildcard_Sort 変数
in_InputMD5ListFilePath 引数と in_OutputMD5ListFilePath 引数に、同じファイルを指定できます。
<< MD5 リスト
← ▼ ▲
CopyDiffByMD5List
→ T_fc.vbs
T_MD5List_CopyDiff
テスト
→ ToolsLib.vbs
ソース
Set c = g_VBS_Lib
CopyDiffByMD5List "C:\FolderA", "E:\USB", _
"E:\Revision-02.txt", "E:\Revision-01.txt", c.AfterDelete
Sub CopyDiffByMD5List( in_SourceFolderPath as string, in_DestinationFolderPath as string,
in_SourceMD5ListFilePath as string, in_DestinationMD5ListFilePath as string,
in_Option as Empty or integer )
コピー元とコピー先の MD5リストを使って、ファイルやフォルダーの差分をコピーします。
【引数】
in_SourceFolderPath
in_DestinationFolderPath
コピー元のフォルダーのパス
コピー先のフォルダーのパス
in_SourceMD5ListFilePath
コピー元の MD5リストのパス
サンプル
Empty または g_VBS_Lib.AfterDelete
コピー先の MD5リストのパス
in_Option
in_DestinationMD5ListFilePath
in_Option 引数にg_VBS_Lib.AfterDelete を指定すると、コピー元にないファイルをコピー先のフォルダー
から削除します。
in_Option 引数に Empty を指定すると、その削除を行いません。
空フォルダーの作成や、ファイルの削除による空フォルダーの削除も正しく処理します。
コピー先（in_DestinationFolderPath 引数）にフォルダーがないときや、空のフォルダーのパスを指定した
ときは、差分を抽出するような動きになります。
コピー元の（in_SourceMD5ListFilePath 引数が指す） MD5リストがないときは、コピー元のフォルダー
MD5リストを使うことで、パッチのように USBメモリーやファイル サーバーを経由して PC 間の差分
コピーをすることができます。 また、下記のステップ１をする PC には、コピー先のフォルダーは、
必要ありません。
Set c = g_VBS_Lib
CopyDiffByMD5List "E:\USB", "C:\BackUp\FolderA", _
"E:\Revision-02.txt", "E:\Revision-01.txt", c.AfterDelete
ステップ１：
PC1 で、USBメモリーに、Revision-02 で追加されたファイルをコピーします。
ステップ２：
PC2 で、USBメモリーから、Revision-02 で追加されたファイルをコピーします。
<< MD5 リスト
参考
→ MD5List >> CopyDiff コマンド
UpdateFolderMD5List
を調べるように
を呼び出して、コピー元の MD5リストを作ります。
関連
→ CopyDiffByMD5Lists
複数のコピー
← ▼ ▲
CopyDiffByMD5Lists
Sub CopyDiffByMD5Lists( in_SettingFilePath as string )
<< MD5 リスト
→ T_fc.vbs
T_MD5List_CopyDiffByMD5Lists
テスト
→ ToolsLib.vbs
ソース
<CopyDiffByMD5List>
<Folder
source_folder="Source_1" destination_folder="Destination_1"
source_hash_file="MD5List_1.txt" destination_hash_file="MD5List_1_old.txt"
/>
<Folder
source_folder="Source_2" destination_folder="Destination_2"
source_hash_file="MD5List_2.txt" destination_hash_file="MD5List_2_old.txt"
/>
</CopyDiffByMD5List>
サンプル
【引数】
in_SettingFilePath
設定ファイル（下記）のパス
コピー元とコピー先の MD5リストを使って、ファイルやフォルダーの差分を複数コピーします。
設定ファイル
→ CopyDiffByMD5List
参考
← ▼ ▲
UpdateFolderMD5List
Sub UpdateFolderMD5List( in_TargetFolderPath as string,
in_InputMD5ListFilePath as string, in_OutputMD5ListFilePath as string, in_Empty as Empty )
MD5 リストを更新します。
【引数】
in_TargetFolderPath
in_InputMD5ListFilePath
対象のフォルダーのパス
入力する（古い）MD5 リストのファイルパス
in_Empty
in_OutputMD5ListFilePath
入力する MD5 リストに書かれたタイムスタンプと変わらないファイルは、MD5リストを再計算しません。
その分、高速に動作します。
出力する MD5 リストのファイルパス
Empty を指定してください
→ ToolsLib.vbs
ソース
T_UpdateFolderMD5List
→ T_fc.vbs
テスト
→ MakeFolderMD5List
関連
in_OutputMD5ListFilePath のファイルは、in_TargetFolderPath のフォルダーに対して
MakeFolderMD5List
したときと同じ結果になります。
← ▼ ▲
IsThereTimeStampInFolderMD5List
Function IsThereTimeStampInFolderMD5List( in_MD5ListFilePath as string ) as boolean
MD5 リストにタイムスタンプが含まれているかどうかを返します。
【引数】
in_MD5ListFilePath
返り値
MD5 リストのファイルパス
MD5 リストにタイムスタンプが含まれているかどうか
ソース
→ ToolsLib.vbs
← ▼ ▲
GetColumnOfPathInFolderMD5List
Function GetColumnOfPathInFolderMD5List( in_MD5ListFilePath as string ) as integer
MD5 リストの行を調べて、ファイルのパスがあるカラム番号（1以上）を返します。
【引数】
in_MD5ListFilePath
返り値
MD5 リストのファイルパス
ファイルのパスがあるカラム番号（1以上）
ソース
→ ToolsLib.vbs
テスト
T_GetColumnOfPathInFolderMD5List
→ T_fc.vbs
MD5 リストの中にタイムスタンプがあるときは、60 を返します。
MD5 リストの中にタイムスタンプがないときは、34 を返します。
指定した MD5 リストのファイルの内容がないときは、0 を返します。
指定した MD5 リストのファイルがないときは、エラーになります。
<< MD5 リスト
← ▼ ▲
ReadPathsInMD5List
Function ReadPathsInMD5List( in_MD5ListFilePath as string, in_ColumnOfPath as integer )
MD5 リストから、キーが相対パスの
【引数】
in_MD5ListFilePath
in_ColumnOfPath
MD5 リストのファイルパス
ファイルのパスがあるカラム番号（1以上）
<< MD5 リスト
MD5 リストから作成した、キーが相対パスの辞書
返り値
fadc3390060b1ba5ef3bef593b7c930d FileA.txt
60631deb298f23dc7e3a4ada23d8372c FileB.txt
サンプル
path = "C:\MD5List.txt"
Set files = ReadPathsInMD5List( path, _
GetColumnOfPathInFolderMD5List( path ) )
Assert files( "FileA.txt" ) = "fadc3390060b1ba5ef3bef593b7c930d FileA.txt"
Assert files( "FileB.txt" ) = "60631deb298f23dc7e3a4ada23d8372c FileB.txt"
返り値の要素のアイテムは、MD5 リストの１行です。
タイムスタンプが入ることもあります。
末尾に改行はありません。
GetColumnOfPathInFolderMD5List
ReadPathsInMD5List
C:\MD5List.txt
スクリプト
辞書
を作成します。
関連
→ OpenForDefragment
→ ToolsLib.vbs
ソース
← ▼ ▲
OpenForDefragment
Function OpenForDefragment( in_MD5ListFilePath as string, in_OptionFlag )
MD5 ハッシュ値が同じファイルを探して、コピーする処理を開始します。
【引数】
in_MD5ListFilePath
in_OptionFlag
存在するファイルの MD5 リストのファイル パス
Empty または get_ToolsLibConsts().TimeStamp
ソース
→ ToolsLib.vbs
テスト
T_OpenForDefragment
→ T_fc.vbs
返り値
→ OpenForDefragmentClass
参考
→ OpenForDefragmentClass
返り値のオブジェクトが削除されるまで、in_MD5ListFilePath 引数に指定したファイルを
読み取りモードで開いています。
返り値のオブジェクトを使って、_FullSet.txt があるフォルダーに対して、
フラグメント（同じ内容のファイルを削除する）や
デフラグメント（完全形に復帰する）ができます。
<< MD5 リスト
in_OptionFlag 引数に get_ToolsLibConsts().TimeStamp を指定すると、MD5リストが
Append
空のファイルのときに、
すると、タイムスタンプ付きの MD5リストになります。
内部でハッシュ値の
辞書
を作ります。
関連
→ ReadPathsInMD5List
キーが相対パスの辞書
← ▼ ▲
OpenForDefragmentClass
<< OpenForDefragment
（子ノードを参照してください。）
← ▼ ▲
FileFullPath (OpenForDefragmentClass)
Dim OpenForDefragmentClass::FileFullPath as string
のフル パス。
MD5 リスト
←
↓