(for Internet Explorer)
← ▼ ▲
↑
CopyFilesToLeafPathDictionary
Sub CopyFilesToLeafPathDictionary(
in_LeafPathDictionary as dictionary of NameOnlyClass or PatchAndBackUpDictionaryClass,
in_IsSetItemDestination as boolean )
【引数】
in_LeafPathDictionary
テスト
ソース
<< LeafPathDictionary
アイテムの Name 属性に書かれたパスから、キーに書かれたパスに、ファイルまたはフォルダーをコピーします。
LeafPathDictionary
→ T_LeafPath.vbs
T_LeafPath
→ ToolsLib.vbs
in_IsSetItemDestination
辞書のアイテムをキーと同じ値にするかどうか
→ T_Diff.vbs
T_ThreeWayMerge_Cached
コンフリクトが発生しても E_Conflict エラーにしないようにするには、AttachPatchAndBackUpDictionary
の in_out_Options 引数に、ThreeWayMergeOptionClass::IsEnableToRaiseConflictError = False を指定
します。
in_LeafPathDictionary 引数のキーとアイテムには、フル パスを格納しておいてください。
in_LeafPathDictionary 引数のアイテムの Name プロパティが Empty のときは、削除します。
でいえば、Name(0)〜Name(2) は、
LeafPathDictionary のアイテムの Name プロパティが文字列の配列のときは、
ThreeWayMerge
Name(0) = Base (real), Name(1) = Left (real), Name(2) = Right (real), Name(3) =
ThreeWayMergeOptionClass
または、Empty です。
PatchAndBackUpDictionaryClass
Name(0) = back_up (real), Name(1) = target (real), Name(2) = patch (real) です。
します。
AttachPatchAndBackUpDictionary
でアタッチしたパッチを実際のファイルに反映するときにも使います。
← ▼ ▲
RemoveKeyOfEmptyItemInLeafPathDictionary
→ T_LeafPath.vbs
テスト
ソース
→ ToolsLib.vbs
Sub RemoveKeyOfEmptyItemInLeafPathDictionary( in_out_LeafPathDictionary as dictionary of NameOnlyClass,
in_IsDeleteFile as boolean )
【引数】
in_out_LeafPathDictionary
in_IsDeleteFile
アイテムの Name プロパティが Empty の辞書の要素をすべて除外します。
LeafPathDictionary
除外したキーに書かれたパスのファイルを削除するかどうか
<< LeafPathDictionary
Set dic = Dict(Array( "C:\FolderA\a.txt", new_NameOnlyClass( Empty, Empty ) ))
RemoveKeyOfEmptyItemInLeafPathDictionary dic, True
Assert not dic.Exists( "C:\FolderA\a.txt" )
Assert not exist( "C:\FolderA\a.txt" )
サンプル
T_LeafPath_RemoveEmpty
← ▼ ▲
NormalizeLeafPathDictionary
Sub NormalizeLeafPathDictionary( in_out_LeafPathDictionary as dictionary of NameOnlyClass )
【引数】
in_out_LeafPathDictionary
フォルダーのパスと、その中のファイルのパスがあるとき、フォルダーのパスを除外します。
LeafPathDictionary
Const NotCaseSensitive = 1
Set dic = CreateObject( "Scripting.Dictionary" )
dic.CompareMode = NotCaseSensitive
Set dic( "C:\Folder" ) = new_NameOnlyClass( "C:\Folder", Empty )
Set dic( "C:\Folder\File.txt" ) = new_NameOnlyClass( "C:\Folder\File.txt", Empty )
NormalizeLeafPathDictionary dic
'// キーが "C:\Folder" のアイテムが除外されます。
サンプル
LeafPathDictionary は、キーを「ファイル、または、空のフォルダーのパス」とした辞書であることが、
正規の状態です。 正規の状態にしなければ、一部の関数が正しく動作しません。
→ T_LeafPath.vbs
テスト
ソース
→ ToolsLib.vbs
T_LeafPath_Normalize
← ▼ ▲
GetInputOutputFilePaths
For Each a_pair In GetInputOutputFilePaths( InputPath, Empty, "Temporary_*.txt" )
copy_ren a_pair.InputPath, a_pair.OutputPath '// メインとなる変換処理に相当
If a_pair.IsOutputPathTemporary Then _
move_ren a_pair.OutputPath, a_pair.InputPath
Next
Function GetInputOutputFilePaths( InputPath as string or PathDictionaryClass, OutputPath as string,
TemporaryBaseName as string ) as array of InputOutputFilePathClass
ファイルを変換するときの、入力ファイルと出力ファイルのパスの配列を返します。
【引数】
InputPath
OutputPath
入力ファイルのパス、または、
出力ファイルのパス、Empty = 入力ファイルに上書き
TemporaryBaseName
OutputPath = Empty のときに使う、一時ファイルの名前
テスト
サンプル
ソース
入力ファイルと出力ファイルのパスの配列
返り値
→ GetTempPath
PathDictionaryClass
For Each a_pair In GetInputOutputFilePaths( "a.txt", "b.txt", "Temporary_*.txt" )
→ vbslib.vbs
→ T_Wildcard.vbs
T_GetInputOutputFilePaths
サンプル
For Each a_pair In GetInputOutputFilePaths( "a.txt", Empty, "Temporary_*.txt" )
For Each a_pair In GetInputOutputFilePaths( "FolderA", "FolderB", "Temporary_*.txt" )
Set paths = new PathDictionaryClass
Set paths( "Files\*.c" ) = Nothing
Set paths( "Files\*.h" ) = Nothing
For Each a_pair In GetInputOutputFilePaths( paths, Empty, "Temporary_*.txt" )
OutputPath = Empty が指定されると、返り値の配列要素のメンバー IsOutputPathTemporary は True になり、
返り値の配列要素のメンバー OutputPath は、TemporaryBaseName 引数に基づいた一時ファイルのパスに
なります。 これは、下記のサンプルのように出力ファイルを入力ファイルに上書きするときに使います。
InputPath 引数と OutputPath 引数が同じパスのときも、OutputPath = Empty が指定されたときと同じ返り値
になります。
引数のバリエーション
入力ファイルに上書きすることに対応したコード
→ InputOutputFilePathClass
関連
→ ReplaceRootPath
InputPath に PathDictionaryClass のオブジェクトを指定できることが特徴です。
← ▼ ▲
InputOutputFilePathClass
ソース
→ vbslib.vbs
の返り値（配列）の要素。
.InputPath
入力ファイルのパス
.OutputPath
GetInputOutputFilePaths
.IsOutputPathTemporary
出力ファイルのパス
OutputPath メンバーは、入力ファイルに上書きする前の一時ファイルのパスかどうか
← ▼ ▲
ArrayFromWildcard2
Function ArrayFromWildcard2( WildcardPath as string ) as PathDictionaryClass of Nothing
ワイルドカードを展開します。 サブ フォルダーも検索します。
【引数】
WildcardPath
フォルダーパス。 ワイルドカードも可。
返り値
PathDictionaryClass
of Nothing
テスト
ソース
→ vbslib.vbs
→ T_Wildcard.vbs
T_ArrayFromWildcard2
ArrayFromWildcard
との違いは、返り値の BasePath プロパティが、WildcardPath 引数に指定した
フォルダーになることです。 ArrayFromWildcard では、カレント・フォルダーが BasePath のプロパ
ティになります。 ワイルドカードがあると、ファイル名でフィルターします。
Set paths = ArrayFromWildcard2( "Folder" )
Assert paths.BasePath = GetFullPath( "Folder", Empty )
Assert IsSameArray( paths.FilePaths, Array( "A.txt", "B.ini", "Sub\A.txt" ) )
サンプル
サンプル
Set paths = ArrayFromWildcard2( "Folder\*.txt" )
Assert paths.BasePath = GetFullPath( "Folder", Empty )
Assert IsSameArray( paths.FilePaths, Array( "A.txt", "Sub\A.txt" ) )
ワイルドカードがないときは、ファイル または フォルダーのパスとして展開します。
指定したパスが指す場所にファイルかフォルダーのどちらがあるかによって変わります。
どちらも存在しないときは、エラーになります。
ワイルドカードがあるときは、ファイル名でフィルターします。
一般に、相対パスのベースとなるフォルダーのパスを WildcardPath 引数に指定します。
BasePath プロパティを明示的に指定したいときは、
PathDictionaryClass
を生成してください。
← ▼ ▲
IsWildcard
Function IsWildcard( path as string ) as boolean
文字列の中にワイルドカードを含むかどうかを返します。
【引数】
path
返り値
調べる文字列
path の中にワイルドカードを含むかどうか
(src)
関連
→ ReplaceFileNameWildcard
← ▼ ▲
IsMatchedWithWildcard
Function IsMatchedWithWildcard( Path, WildCard ) as boolean
ワイルドカードにマッチするかどうかを返します。
【引数】
ワイルドカード
WildCard
検査する文字列
Path
WildCard で指定できるワイルドカードは、先頭に * だけです。
WildCard に * が無い文字列も指定できます。
(src)
サンプル
Assert IsMatchedWithWildcard( "a.bmp", "*.bmp" ) = True
Assert IsMatchedWithWildcard( "a.bmp", "*.jpg" ) = False
Path がワイルドカードにマッチしたかどうか
返り値
→ ExpandWildcard
関連
→ T_Wildcard.vbs
テスト
← ▼ ▲
RemoveWildcardMatchedArrayItems
Sub RemoveWildcardMatchedArrayItems( in_out_PathArray as array of string, WildCard as string )
ワイルドカードにマッチしたパスを配列から除きます。
【引数】
ワイルドカードを含むファイルまたはフォルダの名前
WildCard
（入出力） パスが入った文字列の配列
in_out_PathArray
WildCard で指定できるワイルドカードは、先頭に * だけです。
WildCard に * が無い文字列も指定できます。
(src)
サンプル
arr = Array( "a.jpg", "b.bmp", "c.jpg" )
RemoveWildcardMatchedArrayItems arr, "*.jpg"
Assert IsSameArray( arr, Array( "b.bmp" ) )
← ▼ ▲
RemoveWildcard
Sub RemoveWildcard( WildCard as string, fnames as array of string )
(src)
廃止予定です
代わり
→ RemoveWildcardMatchedArrayItems
← ▼ ▲
ReplaceFileNameWildcard
→ T_Wildcard.vbs # [T_ReplaceFileNameWildcard]
Assert ReplaceFileNameWildcard( "Fo\File.txt", "Fo\*.txt", "Fo\*.ini" ) = "Fo\File.ini"
Function ReplaceFileNameWildcard( Path as string, FromStr as string, ToStr as string )
ワイルドカードを使って、ファイルパスを変更します。
【引数】
Path
FromStr
ファイルパス（ワイルドカードは使えません）
変更前の文字列。ワイルドカード可能。
ToStr
変更後の文字列。ワイルドカード可能。 "" 可能。
ファイル：
vbslib.lib
サンプル
変更後のファイルパス。 Empty=Path が FromStr にマッチしなかった
返り値
(src)
テスト
Path に親フォルダー名が含まれるときは、FromStr, ToStr にも親フォルダー名を含めてください。
s= ReplaceFileNameWildcard( Fo\File.txt", "Fo\*.txt", "Fo\*.xml" '// OK
s= ReplaceFileNameWildcard( Fo\File.txt", "*.txt", "*.xml" '// NG
Path が、FromStr にマッチしなかったときは、Empty が返ります。
関連
→ StrMatchKey クラス
→ RemoveWildcard
ワイルドカードにマッチするかどうか
→ IsWildcard
← ▼ ▲
GetReadOnlyList
count = GetReadOnlyList( "C:\Folder", read_onlys, Empty )
For Each step_path In read_onlys.Keys
is_read_only = read_onlys( step_path ) '// step_path="FileA.txt", ...
Next
Function GetReadOnlyList( TargetPath as string,
out_ReadOnlyDictionary as dictionary of boolean, Opt as Empty ) as integer
フォルダーにあるすべてのファイルの読み取り属性と、読み取り属性がオンの数を取得します。
【引数】
TargetPath
out_ReadOnlyDictionary
調べるフォルダー、またはファイルのパス
（出力） ファイル読み取り属性の辞書、キーは相対パス、Empty可
Opt
Empty
テスト
サンプル
ソース
読み取り属性がオンであるファイルの数
返り値
→ T_File.vbs
T_GetReadOnlyList
→ ToolsLib.vbs
フォルダー自体の 読み取り属性は取得できません。
out_ReadOnlyDictionary 引数には、読み取り属性がオンのファイルとオフのファイルの両方が含まれます。
サンプル
count = GetReadOnlyList( "C:\Folder\FileA.txt", read_onlys, Empty )
For Each step_path In read_onlys.Keys
is_read_only = read_onlys( step_path ) '// step_path="."
Next
TargetPath 引数にフォルダーを指定した場合
TargetPath 引数にファイルを指定した場合
関連
読み取り属性がオンであるファイルがないことをチェックする
サンプル
Assert GetReadOnlyList( "C:\Folder\FileA.txt", Empty, Empty ) = 0
read_onlys.Keys から、読み取り属性がオンであるファイルのパスが分かります。
→ SetReadOnlyAttribute
← ▼ ▲
EnumFolderObjectDic
サブ・フォルダー・オブジェクトを高速に辞書に列挙します。 サブフォルダのサブフォルダも列挙します。
【引数】
in_EmptyOption
in_FolderPath
Empty を指定してください
調べるフォルダのパス。 このフォルダの中から列挙します
Sub EnumFolderObjectDic( in_FolderPath as string, in_EmptyOption as Empty,
out_Folders as dictinoary of Folder )
（出力） サブフォルダを含む Folder オブジェクトの辞書
out_Folders
out_Folders には、in_FolderPath の Folder オブジェクトと、in_FolderPath のサブフォルダーの Folder
オブジェクトの両方が含まれます。 in_FolderPath に相当するキーの値は "." です。
out_Folders は辞書型です。 キーは、フォルダーへの相対パスです。 その基準フォルダーは、
in_FolderPath です。 アイテムは、Folder オブジェクトです。
EnumFolderObjectDic "C:\FolderA", Empty, folders1 '// Set "folders1"
EnumFolderObjectDic "C:\FolderB", Empty, folders2 '// Set "folders2"
For Each step_path In folders1.Keys
If not folders2.Exists( step_path ) Then
mkdir "C:\FolderB\"+ step_path
For Each file In folders1.Item( step_path ).Files
copy "C:\FolderA\"+ step_path + file.Name, "C:\FolderB\"+ step_path
Next
End If
Next
サンプル
EnumFolderObjectDic
EnumFolderObjectDic
→ ExpandWildcard
関連
→ ファイルを一覧するときの速度
Folder
→ Folder オブジェクト (VBS)
出力例
"."
"fe"
"fo1"
"fo1\fo1"
"fo1\fo11.ex"
"fo1\t1"
"fo2"
テスト
→ T_Wildcard.vbs
→ EnumFolderObject
→ EnumFileObjectDic
→ LeafPathDictionary
T_EnumFolderObjectDic
→ vbslib.vbs
ソース
← ▼ ▲
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
フォルダーに入っているファイルを一覧することに近い処理を辞書で行います。
← ▼ ▲
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
関連
ファイルが存在しないとき
→ MD5CacheClass
_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。
← ▼ ▲
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 形式テキストファイルができます。
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_Option 引数
←
↓