(for Internet Explorer)
← ▼
RepliCmp, MergeLib モジュール (VBScript)
同じ名前のファイルの内容をマージする手助けをします。
→ フィードバック - 全体のリポジトリの更新 ver2
RepliCmp
RunMergePrompt
SyncFiles クラス
PatchFiles クラス
複数のフォルダにある同じ名前のファイルを同期します。
１つのファイルをマージする手助けをするプロンプトに入ります。
複数のファイルを同期する手助けをするプロンプトです。
バージョンアップ・マージする手助けをするプロンプトです。
[ テスト ]
リポジトリ
→ マージ・プロンプト
RunMergeUpdate
同じ名前のファイルの内容を、すべて同じになるようにコピーします。
ライセンス
ソフトウェアデザイン館 Sage Plaisir 21 http://www.sage-p.com/
サポート先
→ vbslib
と同じです。
→ アプリケーション (vbslib付属)
関連
← ▼ ▲
マージ・プロンプト
編集するファイルをコピーしてください
マージ・ステップ 1A/1B
1. Diff ツール起動
4. 左を開く: folder1\file1.txt
5. 中を開く: folder2\file1.txt
6. 右を開く: folder3\file1.txt
7. Editing フォルダへコピー（次のステップへ）
9. 終了
番号を入力してください。>
Merge.vbs
Editing
New
… マージ途中のファイルを格納するフォルダ
… マージが完了したファイルを格納するフォルダ
… マージする手助けをするプロンプトのスクリプト
Editing フォルダの内容
file1(1)L.c
… file1.c のマージステップが、1B のときにあるファイル
file1(2).c
… file1.c のマージステップが、2A のときにあるファイル
… file1.c のマージステップが、2B のときにあるファイル
file1(2)R.c
Lは、マージステップ 1A で左のファイルをコピーしたことを
示します。LがM,(中) R(右) になっている場合もあります。
file1….c ファイルが無いときは、file1.c のマージステップが 1A です。
merge_work
マージ・ステップが進むと、Editing フォルダや New フォルダができます。
マージ・ステップ 1A
Editing フォルダにコピーして、編集を開始するファイルを選択します。
左、中、右は、1. Diff ツールで見たときの左、中、右です。
中がマスター、左が１つ目の差分があるファイル、右が２つ目の差分があるファイルです。
RunMergePrompt
を使うと、マージ・プロンプトが開きます。
→ マージ・ステップ 1A
マージ・ステップ 1B
→ マージ・ステップ 1B
編集を開始するファイルを選択します
編集を行います。
マージが完了した状態です。コピーができます。
Editing フォルダにコピーしたファイルを編集します。
下記のプロンプトは、ステップ 1A で左のファイルをコピーしたときのものです。
マージするために左のファイルを編集してください
マージ・ステップ 1B/1B
1. Diff ツール起動
4. 左を開く: Editing\file1(1)L.txt
5. 中を開く: folder2\file1.txt
6. 右を開く: folder3\file1.txt
7. 左の編集を完了して、次のステップへ
8. 前のステップへ
9. 終了
番号を入力してください。>9
7. を選択すると、コピーするファイルを選ぶプロンプトになります。 選んだら ステップ1B に移ります。
7. を選択すると、3ファイルマージのときは、New フォルダへコピーし、ステップ Fin になります。
4ファイルマージのときは、Editing フォルダへ別の名前でコピーし、ステップ 2A になります。
ステップ 2A は、4つ目のファイルをマージするためのプロンプトで、メニューはステップ1A と同じです。
4. 左をコピーして、中と右の表示を入れ替える
5. 中をコピー"
6. 右をコピーして、左と中の表示を入れ替える
8. 戻る
番号を入力してください。>
→ マージ・ステップ Fin
→ フィードバック - 全体のリポジトリの更新 ver2
参考
マージ・ステップ Fin
file1.txt のマージは完了しました。
5. マージ済みを開く
6. マージ済みフォルダを開く
7. 同じ名前のファイルをすべてマージ済みに更新する
8. 前のステップへ
9. 終了
番号を入力してください。>
マージが完了したら、同じ名前のファイルを、すべてマージした内容にすることができます。
→ RunMergeUpdate
参考
[MergeUpdate]
C:\folder1\fileA.txt
C:\folder2\fileA.txt
以上のファイルを更新しますか [Y/N]
7.を選ぶと、更新が必要なファイル（内容が異なるファイル）を検索して一覧します。
Y を押すと、ファイルコピーを行います。
上書きされる前のファイルは、そのファイルが格納されているフォルダの中に新しく作られる
backup フォルダの中に、バックアップとしてコピーします。
コピーしたファイルがプログラムのソースファイルなら、コピー先のプログラムのテストが通ってから、
backup フォルダを削除できます。
RepliCmp
や
ただし、
PatchFiles クラス
を使った場合、左、中、右の意味は異なります。
← ▼ ▲
生成されるスクリプト Merge.vbs を実行すると、マージ・プロンプトが開きます。
詳しくは、
'// vbslib ヘッダが必要
Sub Main( Opt, AppKey )
Set w_= AppKey.NewWritable( g_sh.SpecialFolders( "desktop" ) + "\_RepliCmp" ).Enable()
Dim opt : Set opt = new RepliCmp_Option
opt.m_EditorPath = Setting_getEditorCmdLine(0)
opt.m_DiffPath = Setting_getDiffCmdLine(0)
folders = Array( _
"data\folder0", _
"data\folder1" )
files = Array( _
"file1.txt" )
RepliCmp folders, files, Opt
End Sub
RepliCmp
(src)
Sub RepliCmp( Folders as array of string, Files as array of string,
Opt as RepliCmp_Option )
複数のフォルダにある同じ名前のファイルを同期する手助けをするスクリプトを生成します。
【引数】
Folders
ベースフォルダパスの配列(*1)
Files
比較するファイルの名前の配列
data\folder0 と data\folder1 に入っている file1.txt を比較します。
サンプル
Class RepliCmp_Option
Public m_EditorPath '// as string
Public m_DiffPath '// as string
Public m_bSilent '// as boolean
Public m_ExceptFolders '// as array of string
End Class
RepliCmp_Option
Opt
オプション
(*1)
最初の配列要素は、マスターとして扱われます。
m_EditorPath … エディタのパス
m_DiffPath … Diff ツールのパス
m_bSilent … マージ・フォルダを開かないかどうか
m_ExceptFolders … 除外するパスの一部
→ SyncFiles クラス
ファイル：
RepliCmp.vbs
MergeLib.vbs
テスト
→ T_RepliCmp フォルダ
← ▼ ▲
コールツリー
SyncFile::RunMergePromptMe
RunMergePrompt
in _RepliCmp\Merge.vbs
main
SyncFiles::RunMergePrompt
RepliCmp
Main
in 〜.vbs
in RepliCmp.vbs
//=== Collect replica files
//=== Read and compare files
For i_file = 0 To UBound(files)
repli_files(i_file).OutDiff
For Each fo In Folders
echo "Investigating: " + fo
ExpandWildcard fo + "\" + fi,
ファイルの場所を検索
ファイルの内容を比較
← ▼ ▲
SyncFiles クラス
'// vbslib ヘッダが必要
Sub main()
Dim sync_files : Set sync_files = new SyncFiles
Dim opt : Set opt = new Merge_Option
opt.m_EditorPath = "C:\Windows\notepad.exe"
opt.m_DiffPath = "C:\Program Files\Rekisa\Rekisa.exe"
Set sync_files.m_MergeOption = opt
sync_files.AddRepliFile "folder0\file1.txt"
sync_files.AddRepliFile "folder1\file1.txt"
sync_files.AddRepliFile "folder2\file1.txt"
sync_files.NextSyncFile
sync_files.AddRepliFile "folder0\file2.txt"
sync_files.AddRepliFile "folder1\file2.txt"
sync_files.RunMergePrompt
End Sub
複数のファイルを同期する手助けをするプロンプトです。
(src)
RepliCmp
を実行すると、SyncFiles クラスを使った Merge.vbs を生成します。
Merge.vbs
サンプル
folder0
file1.txt
file2.txt
file2.txt
file1.txt
folder1
file1.txt
folder2
merge_work
Merge.vbs
同期
同期
フォルダ構成
[Sync_Merge_Steps]
1) Step=Fin : file1.txt
2) Step=1A : file2.txt
-1) exit
マージするファイルの番号を入力してください>
プロンプト
マージ・プロンプト
ファイルを選択したら
に入ります。
Merge.vbs をダブルクリックしたときに開くプロンプトです。
ファイル：
MergeLib.vbs
← ▼ ▲
SyncFiles::AddRepliFile
Sub SyncFiles::AddRepliFile( Path as string )
内容が異なるファイルのうち、代表のファイルのパスを登録します
【引数】
Path
内容が異なるファイルの代表のパス
(src)
← ▼ ▲
SyncFiles::AddSameFile
Sub SyncFiles::AddSameFile( Path as string )
以前に AddRepliFile に指定したファイルと内容が同じファイルのパスを登録します
【引数】
Path
内容が同じファイルのパス
(src)
← ▼ ▲
SyncFiles::NextSyncFile
Sub SyncFiles::NextSyncFile()
AddRepliFile, AddSameFile に指定するファイルを、次の同期セットに切り替えます。
(src)
← ▼ ▲
PatchFiles クラス
'// vbslib ヘッダが必要
Sub main()
Dim patch_files : Set patch_files = new PatchFiles
Dim opt : Set opt = new Merge_Option
opt.m_EditorPath = Setting_getEditorPath()
opt.m_DiffPath = Setting_getDiffPath()
With patch_files
Set .m_MergeOption = opt
.m_OldFolderPath = "C:\folder0"
.m_PatchFolderPath = "C:\Patches"
.m_NewFolderPath = "C:\folder1"
End With
patch_files.AddPatchFile "sub1\file1.txt"
patch_files.AddPatchFile "sub2\sub\file2.txt"
Dim old, new
old = "folderA" : new = old
patch_files.AddReplace old, new, "folderA_org"
patch_files.AddReplace old, new, "folderA_plus"
patch_files.AddRenamed "sub2", "sub2A"
patch_files.RunMergePrompt
End Sub
バージョンアップ・マージするときの手助けをするプロンプトです。
(src)
が下記のコードを出力します。
Merge.vbs
PatchSel::OutUpdateHelpScript
サンプル
[Update_Merge_Steps]
1) Step=Fin : file1.txt
2) Step=1A : file2.txt
-1) exit
マージするファイルの番号を入力してください>
プロンプト
マージ・プロンプト
ファイルを選択したら
に入ります。
Merge.vbs をダブルクリックしたときに開くプロンプトです。
パッチの適用元をバージョンアップする状況で、
をしたとき、Diff ツールで
左がパッチ（PatchSel適用前）、中が古いマスター、右が新しいマスターです。
通常、左または右をコピーして修正します。
左を更新するためにコピーしたら、
左がパッチ（PatchSel適用前）、中が新しいマスター、右が古いマスターです。
右と中で差分がある部分が、左と中で無くなるようにしてください。
右を更新するためにコピーしたら、
左が古いマスター、中がパッチ（PatchSel適用前）、右が新しいマスターです。
左と中で差分がある部分が、中と右で無くなるようにしてください。
パッチタグによるテキストの変更
PatchSel で Compare したときは、
左がパッチ（PatchSel適用前）、中が古いPatchSel適用後、右がターゲット
（新しいPatchSel適用後となる予定のもの）です。
通常、左を更新しますが、右をそのまま使うこともあります。
左を更新するためにコピーしたら、
左がパッチ（PatchSel適用前）、中がターゲット、右が古いPatchSel適用後です。
右と中で差分がある部分が、左と中で無くなるようにしてください。
PatchSel 適用後をそのまま使うときは、CompareWork フォルダからターゲットに
コピーしてください。
ファイルやフォルダごと置き換える
パッチの適用元をバージョンアップする状況で、
をしたとき、(1) Diff ツールで、左がパッチ、中が古いマスター、右が新しいマスターです。
(4) Diff ツールで、左が古いパッチ、中が新しいパッチ、右が新しいマスターです。
(1) の中と右の差分を、(4)の中に反映させ、(4)の中と右の差分を、(1)の左と中の差分と
一致させてください。
マスターに無いファイルは、そのままパッチとして使います。
→ PatchFiles クラス・リファレンス
関連
← ▼ ▲
PatchFiles クラス・リファレンス
.m_OldFolderPath
.m_PatchFolderPath
.m_NewFolderPath
古い適用元のフォルダのパス
新しい適用元のフォルダのパス
パッチのフォルダのパス
← ▼ ▲
PatchFiles::AddRenamed
Sub PatchFiles::AddRenamed( OldPath as string, NewPath as string )
パッチの適用元が新しくなって、フォルダやファイルが移動したことを設定します。
【引数】
OldPath
移動前のパス（m_OldFolderPath からの相対パス）
NewPath
移動後のパス（m_NewFolderPath からの相対パス）
← ▼ ▲
PatchFiles::AddPatchFile
Sub PatchFiles::AddPatchFile( StepPath as string )
比較するファイルを登録します。
【引数】
StepPath
surf
比較するファイル。
（出力） オブジェクトへのハンドル
Me.m_OldFolderPath, Me.m_NewFolderPath, Me.m_PatchFolderPath
からの相対パスです。
(src)
← ▼ ▲
PatchFiles::AddReplace
Sub PatchFiles::AddReplace( OldStepPath as string, NewStepPath as string,
PatchStepPath as string )
置き換えるファイルかフォルダを登録します。
【引数】
StepPath
surf
比較するファイルかフォルダ
（出力） オブジェクトへのハンドル
(src)
← ▼ ▲
RunMergePrompt
(src)
Sub RunMergePrompt( Pathes as array of string, Opt as Merge_Option )
１つのファイルをマージする手助けをするプロンプトに入ります。
【引数】
Pathes
Opt
マージするファイルのパスの配列。(0) はマスター
オプション
Class Merge_Option
Public m_EditorPath
Public m_DiffPath
Public m_NewPath
Public m_SyncPathes
End Class
'// vbslib ヘッダが必要
Sub main()
Redim pathes(2)
pathes(0) ="folder0\file1.txt"
pathes(1) ="folder1\sub1\file1.txt"
pathes(2) ="folder1\sub2\file1.txt"
Dim opt : Set opt = new Merge_Option
opt.m_EditorPath = "C:\Windows\notepad.exe"
opt.m_DiffPath = "C:\Program Files\Rekisa\Rekisa.exe"
RunMergePrompt pathes, opt
End Sub
サンプル Merge.vbs
… エディタのパス
… Diff ツールのパス
… マージが完了したときの出力パス
（デフォルト＝ New\（pathes(0)のファイル名））
SyncFiles クラス
PatchFiles クラス
Merge_Option
や
から呼ばれます。
また、下記のサンプルのようにスクリプトを手動で作成して、マージするプロンプトを
使うこともできます。
→ マージ・プロンプト
参考
m_SyncPathes については、
→ RunMergeUpdate
→ Merge_Option
→ RunMergePrompt (RepliCmp)
内部フロー
← ▼ ▲
RunMergeUpdate
Sub RunMergeUpdate( NewPath as string, Pathes as array of string, Opt as Merge_Option )
同じ名前のファイルの内容を、すべて同じになるようにコピーします。
【引数】
NewPath
Pathes
コピーする内容が書かれたファイル
内容を変更するファイルが格納されたフォルダのパス
Opt
→ Merge_Option
Opt.m_SyncPathes には、Empty か、Pathes に追加するフォルダのパスが格納された配列を
指定します。
および、下記
Opt 引数
操作方法
→ マージ・ステップ Fin
(src)
内部フロー
RunMergeUpdate
RunMergeUpdateSub
'//=== Compare file with New file
b_equal( i ) = fc_r( NewPath, Pathes( i ), Empty )
i = input( "以上のファイルを更新しますか [Y/N]" )
If not b_equal( i ) Then
copy NewPath, Pathes(i)
new_path, Pathes, Opt
RunMergePrompt
Pathes, Opt
← ▼ ▲
PartCmp
cscript PartCmp.vbs C:\file1.txt C:\file2.txt [start]
cscript PartCmp.vbs [/S][/B:...][/D][/E:...] part_file whole_file start_tag
65536行目までに start_tag が無いとき、置き換えるテキストが 50行を超えるとき、1行が 4096
文字を超える場合は、比較を行いません。
テキストファイルの一部が同じかどうか比較します。
【引数】
part_file
whole_file
whole_file の一部と比較する内容が書かれたファイルのパス
part_file と比較する内容が一部にあるファイルのパス。ワイルドカード可
start_tag
whole_file の中の比較するテキストの最初の行に含まれるテキスト
サンプル
C:\file1.txt
C:\file2.txt
start
and
end
replacing
---[start]---
delete1
delete2
---[end]----
after text
---[start]---
delete1
delete2
比較
エラーレベル
21=同じ、0=start_tag が whole_file にない、2=異なる
/S
サブフォルダの whole_file も比較する
サンプル２： /S オプション
cscript PartCmp.vbs /S C:\file1.txt C:\folder\*.txt [start]
C:\folder フォルダとそのサブフォルダにある *.txt ファイルについて、そのファイルの
[start] を含む行から C:\file1.txt を比較します。
*.txt ファイルに [start] を含む行が無いときは、比較を行いません。
1つも比較しなかったときだけ、エラーレベルが 0 になります。
C:\file1.txt と異なる行が見つかったら、それ以上は比較を行わず、エラーレベルが 2
になります。
異なる行が見つからなかったら、エラーレベルが 21 になります。
比較した結果を、次のように標準出力へ出力します。
/B:var=path
バッチファイルに結果を返す
→ サンプル２
サンプル３： /B オプション
→ サンプル３
cscript PartCmp.vbs /S /B:out=_out.bat C:\file1.txt C:\folder\*.txt [start]
/B オプションは、違いがあったファイルのパスを環境変数に設定するバッチファイルを
出力します。 違いが無かったらバッチファイルを出力しません。
これは、バッチファイルに結果を返すために使います。
_out.bat の例： 違いファイルがあったとき
set out=C:\folder\file4.txt
call _out.bat & del _out.bat
if not "%out%"=="" explorer /select, "%out%" & set out=
_out.bat の例： 違いファイルがなかったとき
set out=
PartCmp.vbs を実行した後で、_out.bat を利用するコマンドの例：
/D
一致するファイルと一致しないファイルを一覧する
サンプル４： /D オプション
cscript PartCmp.vbs /S /D C:\samples\*.txt C:\folder\*.txt [start]
→ サンプル４
/D オプションは、part_file に指定したワイルドカードに一致する複数のファイルのうち、
どの part_file が、現在調査している whole_file と一致したかを調べます。
また、違いがあっても中止せず、C:\folder 全体を比較します。
C:\samples\part1.txt
C:\folder\file2.txt
start
and
end
replacing
---[start]---
delete1
delete2
---[end]----
after text
---[start]---
delete1
delete2
比較
C:\samples\part2.txt
比較
---[start]---
delete1
delete2
---[end]----
PartCmp の出力
---[start]---
delete1
delete2
---[end]----
Same as part1.txt are 0 files
Same as part2.txt are 2 files
C:\samples\file2.txt
C:\samples\file4.txt
Others are 1 files
C:\samples\file1.txt
Others は、どの part_file にも
一致していないファイルで、
start_tag と一致したものです。
/E:path
whole_file で比較しないフォルダのパス
Same: C:\folder\file1.txt
Same: C:\folder\file2.txt
Diff: C:\folder\file3.txt
(src)
サブフォルダの whole_file も比較する
バッチファイルに結果を返す
whole_file の中の、start_tag に指定したキーワード（キーフレーズ）が見つかった行から、
part_file の内容と比較します。 すべてのファイルが同じであれば、エラーレベル＝21 になります。
フォルダーの中にあるテキスト・ファイルの中の、あるタグから始まる複数行が、正しい内容と
同じになっているかチェックするときに使います。
サンプル
→ PartRep フォルダ
関連
→ PartCmp_compareFiles
→ SearchStringTemplate
←
↓