(for Internet Explorer)
(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
関連
Sub  EnumFolderObject( FolderPath as string, out_Folders as array of Folder )
サブ フォルダーのオブジェクトを高速に列挙します。 サブ フォルダーのサブ フォルダーも列挙します。
【引数】
out_Folders
FolderPath
(出力) サブフォルダのオブジェクトの配列
調べるフォルダのパス。 このフォルダの中から列挙します
(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
サブ・フォルダーを列挙しない場合
性能
サンプル
    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
Sub  GetSubFolders( folders as array of string, path as string )
サブ フォルダーのパスを列挙します。 サブ フォルダーのサブ フォルダーも列挙します。
【引数】
folders
path
(出力) サブ フォルダーのパスの配列
調べるフォルダーのパス。 このフォルダーの中から列挙します
関連
(src)
その他
フォルダーに入っているファイルを一覧することに近い処理を辞書で行います。
一覧するときに名前で並べ替えるかどうか
辞書を名前で並べ替える
フォルダーの中にあるすべてのファイルの
を一覧したテキストファイル。
作成したフォルダー(A)の内容が、以前固定したフォルダー(B)の内容と同じであるかどうかを
チェックするとき、フォルダー(B)に対応する MD5 リストと呼ばれるテキストファイルがあれば、
フォルダー(B) がなくてもチェックができます。
参考
圧縮ファイルを展開したフォルダーやパッチをあてたフォルダーが正しく復元できたことを保証できます。
MD5 リスト
復元したフォルダー
チェック
FileA.txt
FileB.txt
fadc3390060b1ba5ef3bef593b7c930d FileA.txt
60631deb298f23dc7e3a4ada23d8372c FileB.txt
ファイル名
(相対パス)
関連
ファイルが存在しないとき
_FullSet.txt ファイルが存在するフォルダーは、その中の一部のファイルが存在しない可能性が
ありますが、修復することがおそらく可能です。 _FullSet.txt ファイルの内容は MD5リストです。
存在するファイルに関する MD5リスト(ファイル名の例: ExistingFiles.txt)から同じハッシュ値(MD5)
のファイルを探し、存在すればコピーして修復できます。
ファイル名
(相対パス)
2015-12-28T11:13:34+09:00 fadc3390060b1ba5ef3bef593b7c930d FileA.txt
2016-02-20T11:01:04+09:00 60631deb298f23dc7e3a4ada23d8372c FileB.txt
MD5 リスト、タイムスタンプ付き
タイムスタンプ
参考
他にもあります。
_FullSet.txt ファイルが存在するフォルダーから、別のフォルダーにコピーするとき、コピー元を修復
しなくても、コピー先を完全なフォルダーにすることができます。
参考
の Fragment と Defragment。
関連
空のフォルダーも MD5 リストに含めます。 その MD5 値は、0が32文字です(vbslib の仕様)。
また、その値は、get_ToolsLibConsts().EmptyFolderMD5 から参照できます。 タイムスタンプ
は、常に2001-01-01T00:00:00+00:00 (vbslib の仕様)で、
get_ToolsLibConsts().EmptyFolderTimeStamp から参照できます。
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 _
    :
の1行
も 0が32文字です(vbslib の仕様)。
ただし、
Sub  MakeFolderMD5List( in_FolderPath as string,  in_MD5ListFilePath as string,  in_Option )
後でフォルダーが正しく復元できたかどうかをチェックできるように、MD5 リストを作成します。
【引数】
in_FolderPath
in_MD5ListFilePath
対象のフォルダーのパス、またはその辞書
作成する MD5 リストのファイルパス
関連
テスト
ソース
T_MD5List
→ T_fc.vbs
→ ToolsLib.vbs
ファイル名が Ascii 文字だけのときは、Ascii 形式テキストファイルができます。
Ascii 文字以外が含まれるときは、Unicode 形式テキストファイルができます。
空のフォルダーも列挙します。 その MD5 値は、0が32文字です(vbslib 新仕様)。
in_FolderPath 引数 - 複数の対象フォルダー
複数の対象のフォルダーに対する MD5リストを1つのファイルに出力するときは、
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リスト
in_Option
対象フォルダーの中に MD5リストを作成することはできますが、
そのMD5リストの中に作成しようとしている MD5リストを含めることはできません。
なぜなら、MD5リストのMD5が作成する前のMD5になってしまうからです。
Empty
パスでソートします。
MD5 リストの中の相対パスの基準フォルダーは、in_FolderPath 引数の値です。
tc.IncludeFullSet
tc.FasterButNotSorted
ソートしません。 やや高速に処理します。
に使えなくなります。
には使えます。
とも使えなくなります。
があるフォルダーは、ファイルを列挙せず _FullSet.txt の内容を読みます。
tc.FasterButNotSorted と or で同時に指定してください。
tc.TimeStamp
MD5 リストにファイルの更新日時も含めます。
tc は、get_ToolsLibConsts() です。
で使えるようになります。
tc.BasePathIsList
MD5 リストの中の相対パスの基準フォルダーは、in_MD5ListFilePath 引数の値の
親フォルダーです。
指定しなかったときの基準フォルダーは、in_FolderPath 引数の値です。
Empty または、下記の論理和を指定します。
Sub  CheckFolderMD5List( in_TargetFolderPath as string,  in_CorrectMD5ListFilePath as string,
    in_Option as Empty or variant )
MD5 リストを使って、フォルダーが正しく復元できたかどうかをチェックします。
【引数】
in_TargetFolderPath
in_CorrectMD5ListFilePath
チェック対象の(復元した)フォルダーのパス、またはその辞書
MD5 リストのファイルパス
関連
テスト
正しく復元できていれば、そのまま関数から返ります。
正しく復元できていなければ、Diff ツールで差分が表示され、エラーになります。
T_MD5List
→ T_fc.vbs
ソース
→ ToolsLib.vbs
in_Option
Empty または get_ToolsLibConsts().BasePathIsList
と同じ動きです。
これは、
in_TargetFolderPath 引数は、
と同様に辞書(複数の対象フォルダー)を指定できます。
Diff ツールの左側がファイルにある(過去の)MD5リスト、右側が現在のフォルダーの MD5リストです。
対象フォルダーに含まれる MD5リスト
対象のフォルダーの中に MD5リストがあるときは、そのMD5リストの中にはそのMD5リスト
ファイルの MD5が含まれていません。 なぜなら、MD5リストのファイルの MD5 を含んだ
→ IsSameHashValueOfLeafPathDictionary (MD5CacheClass)
MD5リストができないからです。
CheckFolderMD5List 関数は、MD5リストの有無と、MD5リスト自身のハッシュ値の正しさに
ついては、チェックしません。
in_CorrectMD5ListFilePath 引数にタイムスタンプ付き MD5 リストを指定したとき、タイムスタンプが
異なっていてもエラーにはなりません。
Empty
パスでソートします。 ソートするのは内部でチェック対象のフォルダーから一時的に作成する
MD5リストです。 in_CorrectMD5ListFilePath 引数に指定した MD5リストは、ソートされます。
tc.BasePathIsList
MD5 リストの中の相対パスの基準フォルダーは、in_MD5ListFilePath 引数の
親フォルダーです。
MD5 リストの中の相対パスの基準フォルダーは、in_FolderPath 引数です。
c.TimeStamp
c は、g_VBS_Lib です。 tc は、get_ToolsLibConsts() です。
正しく復元できていたら、ファイルのタイムスタンプを MD5リストに書かれた日時に変更します。
Function  IsSameMD5List( in_MD5ListFilePathA as string,  in_MD5ListFilePathB as string,
    in_Option as Empty or variant)
2つの MD5 リストの中のハッシュ値だけを比較して同じかどうかを返します。
【引数】
in_MD5ListFilePathA
in_MD5ListFilePathB
MD5 リストのファイルパス
比較するもう1つの MD5 リストのファイルパス
in_Option
Empty または g_VBS_Lib.EchoV_NotSame
返り値
ハッシュ値が等しいかどうか
MD5 リストの中に記録されたタイムスタンプは、比較に使われません。
MD5リストの行の順番だけが違うときは、等しいと判定します。
ソース
→ ToolsLib.vbs
テスト
in_Option = g_VBS_Lib.EchoV_NotSame を設定すると、違った行を表示します。
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 引数に
一時的に出力するパスを指定し、その一時ファイルを作成した後(ファイルを閉じた後)で、
を呼び出してください。
改行文字は、CR+LF に統一されます。
ソートするときに使う比較関数は、
です。
関連
in_InputMD5ListFilePath 引数と in_OutputMD5ListFilePath 引数に、同じファイルを指定できます。
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 間の差分
コピーをすることができます。 また、下記のステップ1をする PC には、コピー先のフォルダーは、
必要ありません。
    Set c = g_VBS_Lib
    CopyDiffByMD5List  "E:\USB",  "C:\BackUp\FolderA", _
        "E:\Revision-02.txt",  "E:\Revision-01.txt",  c.AfterDelete
ステップ1:
PC1 で、USBメモリーに、Revision-02 で追加されたファイルをコピーします。
ステップ2:
PC2 で、USBメモリーから、Revision-02 で追加されたファイルをコピーします。
参考
を調べるように
を呼び出して、コピー元の MD5リストを作ります。
関連
複数のコピー
Sub  CopyDiffByMD5Lists( in_SettingFilePath  as string )
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リストを使って、ファイルやフォルダーの差分を複数コピーします。
設定ファイル
参考
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
テスト
関連
in_OutputMD5ListFilePath のファイルは、in_TargetFolderPath のフォルダーに対して
したときと同じ結果になります。
Function  IsThereTimeStampInFolderMD5List( in_MD5ListFilePath  as string ) as boolean
MD5 リストにタイムスタンプが含まれているかどうかを返します。
【引数】
in_MD5ListFilePath
返り値
MD5 リストのファイルパス
MD5 リストにタイムスタンプが含まれているかどうか
ソース
→ ToolsLib.vbs
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 リストのファイルがないときは、エラーになります。
Function  ReadPathsInMD5List( in_MD5ListFilePath  as string,  in_ColumnOfPath  as integer )
MD5 リストから、キーが相対パスの
【引数】
in_MD5ListFilePath
in_ColumnOfPath
MD5 リストのファイルパス
ファイルのパスがあるカラム番号(1以上)
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 リストの1行です。
タイムスタンプが入ることもあります。
末尾に改行はありません。
ReadPathsInMD5List
C:\MD5List.txt
スクリプト
を作成します。
関連
→ ToolsLib.vbs
ソース
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
返り値
参考
返り値のオブジェクトが削除されるまで、in_MD5ListFilePath 引数に指定したファイルを
読み取りモードで開いています。
返り値のオブジェクトを使って、_FullSet.txt があるフォルダーに対して、
フラグメント(同じ内容のファイルを削除する)や
デフラグメント(完全形に復帰する)ができます。
in_OptionFlag 引数に  get_ToolsLibConsts().TimeStamp を指定すると、MD5リストが
空のファイルのときに、
すると、タイムスタンプ付きの MD5リストになります。
内部でハッシュ値の
を作ります。
関連
キーが相対パスの辞書
(子ノードを参照してください。)
Dim  OpenForDefragmentClass::FileFullPath  as string
のフル パス。