(for Internet Explorer)
← ▼ ▲
↑
StopScreenSaver
スクリーンセーバーを起動しないようにします。
番号またはコマンド >StopScreenSaver
-------------------------------------------------------------------------------
30秒ごとに自動的にシフトキーを押すことで、スクリーンセーバーを起動しないようにし
ます。
スクリーンセーバーを停止する時間（分）> 60
残り 60分
[ 親: vbslib のショートハンド・プロンプト ]
StopScreenSaver
60
ソース
→ vbslib Prompt.vbs
← ▼ ▲
Switches
[ 親: vbslib のショートハンド・プロンプト ]
仮想的なスイッチの設定に従って、複数のファイルを編集します。
たとえば、デバッグ用の設定とリリース用の設定を切り替えるスイッチを定義して、
デバッグに必要ないくつかのソース ファイルや設定ファイルの編集をまとめて行います。
<Switches>
<SwitchNow target_set_names="Debug"/>
<Switch set_names="Release, Debug"/>
<File path="debug.h">
<T line="whole">
<Debug>#define DEBUG 1</Debug>
<Release>// #define DEBUG 1</Release>
</T>
</File>
</Switches>
Switches.swit 設定ファイル：
サンプル
debug.h
:
// #define DEBUG 1
:
debug.h
:
#define DEBUG 1
:
↑ コメント アウト // による無効化
Switches を実行すると、
Debug 設定にスイッチします。
…
…
スイッチの１つを定義。
スイッチの値は、コンマ区切り
（CSV 形式）、で指定します。
Debug にスイッチしたときと、
Release にスイッチしたときの
debug.h ファイルの一部の
テキストを指定しています。
…
スイッチ
番号またはコマンド >Switches
-------------------------------------------------------------------------------
環境に合わせて複数のテキスト ファイルを自動編集します。
設定ファイルのパス >C:\work\Switches.trans
-------------------------------------------------------------------------------
C:\work\Text1.txt
C:\work\Text2.txt
C:\work\File.txt
C:\work\Folder
以上のファイルを編集します。
続行するには Enter キーを押してください . . .
-------------------------------------------------------------------------------
C:\work\Text1.txt
C:\work\Text2.txt
C:\work\File.txt
C:\work\Folder
編集しました。
Switches
Switch タグ、File タグ、T タグは、複数指定できます。
debug.h ファイルの中で、// #define DEBUG 1 を検索して、見つかったら、
#define DEBUG 1 に置き換えます。
→ 詳細
関連
→ Translate
ソース
テスト
→ T_Switches.vbs
→ vbslib Prompt.vbs
↑ コメント アウト削除による有効化
どのスイッチの値も対象のファイルにないときは、エラーになります。
→ (test) ToolsLib.vbs
→ ToolsLib.vbs
注意
コードのサイズを減らすために #if を使うと、整合性を取ることが非常に難しくなります。
DoTextShrink
でコードのサイズを減らすとよいでしょう。
← ▼ ▲
Switches の設定ファイル
Switches/SwitchNow
@target_set_names
切り替えた後のスイッチの値。
複数の値を指定するときは、CSV 形式（コンマ区切り）で記述します。
切り替えるたびに記述しなおしてください。
例： target_set_names="Debug, Minimum"
@verbose
デバッグ用の詳細表示をするかどうか。 "yes" か "no"。
Switches/Switch
@set_names
スイッチの値の定義。
CSV 形式（コンマ区切り）で記述します。
通常、オンかオフに相当する２つのシンボルを記述しますが、
３つ以上記述することもできます。
複数のスイッチを定義できますが、スイッチの値の名前空間はグローバル
ですので、衝突しないようにしてください。
１つのみ
複数可能
Switches/File
下記の他に、
Variable タグ
も、記述できます。
<< Switches
複数可能
@path
内容を置き換えるテキストファイルのパス。
Switches/File/T
複数可能
@line
省略時は、置き換えるテキストが行の途中にあっても置き換えます。
"head" の時は、行の先頭のみ置き換えます。
"whole" の時は、行の全体に対して置き換えます。
Switches/File/T/(スイッチの値)
text()
スイッチの値がこれまで設定されていたときは、置き換える前のテキスト。
スイッチの値がこれから設定しようとしているときは、置き換えた後のテキスト。
Variable タグ
で定義した変数を参照することができます。
@variable
text() で、
で定義した変数を参照するかどうか。 "yes" か "no"。
Variable タグ
"no" のときは、${Var} のようなテキストは、変数の値に置き換わりません。
@cut_indent
text() から、行頭の空白やタブをカットしたテキストで処理するかどうか。
"yes" か "no"。 参考：
@indent
text() に、行頭の空白やタブを追加したテキストで処理するようにします。
"${Count}*${Character}" 形式で指定します。
例： "2*&#9;" … 2つのタブ、 "8*&#x20;" … ４つの空白
なお、&#〜; は、
XML の文字参照
です。
→ CutIndentOfMultiLineText
Switches/File/T/(スイッチの値)/(スイッチの値)/ ...
複数可能
複数可能
ネストしたスイッチの値は、And 条件として処理します。
なお、OR 条件を指定する方法はありません。 Variable タグを活用してテキストを指定して
ください。
例：
<T>
<Debug>
<Minimum>Debug and Minimun</Minimum>
<Full>Debug and Full</Full>
</Debug>
<Release>
<Minimum>Release and Minimun</Minimum>
<Full>Release and Full</Full>
</Release>
</T>
Switches/File/T/LinesStart[attribute_of='T']
１つのみ
置き換える範囲の直前の行にマッチするキーワード。
このキーワードにマッチした行の次の行から、LinesEnd[attribute_of='T']/text()
に指定したキーワードにマッチした行の前の行までが、同じ T タグを親要素に
持つタグで指定したテキストで置き換える範囲です。
text()
<T>
<LinesStart attribute_of="T">StartLine</LinesStart>
<LinesEnd attribute_of="T">EndLine</LinesStart>
<Minimum>Minimun</Minimum>
<Full>Full</Full>
</T>
例：
上記の設定で Full にスイッチすると、下記のように置き換わります。
Minimum
-- StartLine --
Minimum
-- EndLine --
Minimum
Minimum
-- StartLine --
Full
-- EndLine --
Minimum
text()
置き換える範囲の直後の行にマッチするキーワード。
参考 → LinesStart[attribute_of='T']
１つのみ
Switches/File/T/LinesEnd[attribute_of='T']
省略時は、スイッチの値のタグで囲まれたテキストでファイルの内容を
置き換えますが、
"path" を指定すると、スイッチの値のタグで囲まれたテキストを、
ファイルやフォルダーのパスとして処理します。 そして、スイッチの値に
よって、ファイルやフォルダーをコピーして置き換えます。 パスを指定しな
かったときは、ファイルやフォルダーを削除します。
@text_type
<File path="File.txt">
<T text_type="path">
<SetX>File\FileX.txt</SetX>
<SetY>File\FileY.txt</SetY>
<SetZ></SetZ>
</T>
</File>
例：
SetX にスイッチすると、File\FileX.txt から File.txt にコピーします。
SetY にスイッチすると、File\FileY.txt から File.txt にコピーします。
SetZ にスイッチすると、File.txt を削除します。
Switches の設定ファイルに記述できる XML の内容を説明します。
→ CutIndentOfMultiLineText
スイッチのスイッチには対応していません。
もし対応していれば、たとえば、A, B or C がオンの場合 X がオン、D or E がオンの場合 Y がオン
が定義できれば、同じ text() を 3つと 2つ書く必要がなくなります。
@dump
"yes" のときは、text() の内容をバイナリー形式でダンプします。
文字コード セットは、BOM 付き Unicode です。 省略時は "no" です。
スイッチの値がマッチしないときのヒントになります。
← ▼ ▲
SyncByShortcut
ショートカットが指すファイルを２つのフォルダー間で同期コピーします。
番号またはコマンド >SyncByShortcut
-------------------------------------------------------------------------------
ショートカットが指すファイルを２つのフォルダー間で同期コピーします。
設定ファイルのパス >
フォルダー (1): "C:\FolderA"
フォルダー (2): "C:\FolderB"
C:\FolderA\A.txt
C:\FolderB\sub\A.txt
以上のファイルを、対応するフォルダーにコピーします。
ソース
→ vbslib Prompt.vbs
テスト
→ T_SyncByShortcut フォルダー
SyncByShortcut
[ 親: vbslib のショートハンド・プロンプト ]
← ▼ ▲
SyncFilesT
複数のターゲット間でファイルの内容を一度に同期（マージ）することで、全てのターゲットが
最新の状態であることを維持できるようになります。
行がファイル、列がモジュールのターゲット、という表を表示して、同期するファイルの状況を
一覧できます。
番号またはコマンド >SyncFilesT
-------------------------------------------------------------------------------
>SyncFilesT
行がファイル、列がモジュールのターゲット、という表を表示して、すべてのターゲット
間で同期（マージ）することを支援します。
設定ファイルのパス >C:\Folder\SyncFilesT_Sample.xml
-------------------------------------------------------------------------------
ターゲット間で比較するファイルの kind 値を入力してください。
1. kind 値 1 のファイルを比較する
2. kind 値 2 のファイルを比較する
:
97. 再スキャンして、一覧を表示する [Reload]
98. 詳細を表示する [ShowDetail]
96. HTML ファイルを保存する [SaveHTML]
99. 終了 [Exit]
kind 値または上記の番号またはコマンド名>
テスト
→ T_SyncTable フォルダー
→ SyncFilesMenuLib.vbs
ソース
サンプル
ターゲット間でファイルを比較する、を選ぶと、
が起動するのでファイルの内容に
<SyncFilesT>
<HashList path="Committed MD5List.txt"/>
<ModuleFiles module_name="ModuleX">
<TargetFiles index="1" target_name="ModuleX\TargetA" path="ModuleX\TargetA"/>
<TargetFiles index="2" target_name="ModuleX\TargetB" path="ModuleX\TargetB"/>
<TargetFiles index="3" target_name="ModuleX\TargetC" path="ModuleX\TargetC"/>
<!-- index="1,2,3" -->
<File kind="1" description="A,A,B" name="g1.c" line_num="8"/>
<File kind="2" description="A, , " name="g2.c" line_num="9"/>
<File kind="2" description=" ,B,B" name="g3.c" line_num="10"/>
</ModuleFiles>
<CommittedFile hash="9a0baa2ed090b16796c55c156b5ffca9" revision="ModuleX\1\01\A"/>
<CommittedFile hash="a307d745bf90d586726f52a0689258fb" revision="ModuleX\1\01\B"/>
<CommittedFile hash="b927f9ad55f40d1b13688d417337d3e2" revision="ModuleX\2\01\A"/>
<CommittedFile hash="60422f855bd29aa68f7316855f43f4c1" revision="ModuleX\2\01\B"/>
</SyncFilesT>
上記の表は、下記の設定ファイルを開いたとき（SyncFilesT コマンドを起動したとき）に表示
されます。
Diff ツール
表が崩れているのは、ブラウザーが標準仕様に対応していないためです。
→ 詳細
表の色から、g1.c ファイルは、TargetA と TargetB で内容が同じであることを表しています。
同様に g3.c ファイルは、TargetB と TargetC で内容が同じであることを表しています。
同じ色でも行が異なれば、同じ内容ではありません。
01＼A は、リビジョン 01、description 記号 A という意味です。 リビジョンは、01 から始まる
整数に限られます。 description 記号が同じファイルは、同じ内容であるべきということを
表しています。
→ SyncFilesT_Class メモ
関連
→ ModuleAssort
→ ファイルの同期手順
SyncFilesT
C:\Folder\SyncFilesT_Sample.xml
ファイル名の左にある番号は、kind 番号です。 ターゲットによってファイル名が異なって
いても、kind 番号を合わせれば比較対象になり、同じ行に配置されます。
SyncFilesT の設定ファイル：
[ 親: vbslib のショートハンド・プロンプト ]
→ サンプル
→ 新規 SyncFilesT 設定ファイルの生成
→ SyncFilesT の設定ファイルの詳細
→ 新規作成
SyncFilesT を、起動すると、下記のサンプルのような表が表示されます。
ModuleX
TargetA
g1.c
g3.c
g3.c
g1.c
TargetB
g2.c
g3.c
TargetC
ついては、手動で同期してください。
上記の TargetA (index=1) の g2.c ファイルは、TargetB, TargetC の g3.c ファイルと同期を
とるように kind 番号を合わせています。 line_num の値は、自動的に更新されます
ターゲットのフォルダーの一部だけを比較対象にするときは、Folder タグ、File タグ、Except タグを
記述してください。 詳細
→ FF-path 属性対応の XML、path 属性と、Except タグ
<TargetFiles index="1" target_name="TargetA" path="TargetA">
<Folder path="TargetA">
<Except path="TargetA\Sub"/>
</Folder>
<Folder path="TargetA\Sub\1"/>
</TargetFiles>
TargetFiles タグの path 属性は、子ノードに Folder タグ、File タグ、Except タグがあるときは、
ターゲットのルート フォルダーを指定するたけで、比較対象のフォルダーにはなりません。
必要なら、上記のように、Folder タグで改めて指定してください。
← ▼ ▲
新規 SyncFilesT 設定ファイルの生成
番号またはコマンド >syncfilest_new
-------------------------------------------------------------------------------
>SyncFilesT
SyncFilesT で使う設定ファイルのテンプレートを生成します。
各ターゲットのフォルダーが入ったフォルダーのパス >C:\ModuleX
>OpenForWrite "C:\_SyncFilesT_ModuleX.xml"
生成した上記の設定ファイルでよければ、上書きされないためにファイル名を変えて
ください。
syncfilest_new
SyncFilesT の設定ファイル
フォルダーの中の一部ファイルだけ同期するときは、同期するファイルだけを抽出するようにコピーを
するスクリプトを独自に作成して、コピーしたフォルダーに対して SyncFilesT ツールを使うとよいでしょ
う。 また、逆方向のコピーをするスクリプトも作成するとよいでしょう。
<SyncFilesT>
<ModuleFiles module_name="ModuleX">
<TargetFiles index="1" target_name="ModuleX\TargetA" path="ModuleX\TargetA"/>
<TargetFiles index="2" target_name="ModuleX\TargetB" path="ModuleX\TargetB"/>
<TargetFiles index="3" target_name="ModuleX\TargetC" path="ModuleX\TargetC"/>
<!-- index="1,2,3" -->
<File kind="1" description="A,A, " name="g1.c" line_num="8"/>
<File kind="1" description=" , ,B" name="g2.c" line_num="9"/>
<File kind="2" description="A,B,B" name="g3.c" line_num="10"/>
</ModuleFiles>
</SyncFilesT>
を新規に作成するときは、比較する各種ターゲットを１つのフォルダーに
SyncFilesT_new コマンド
を使って自動作成します。
ただし、TargetFiles/@index、File/@kind、 File/@description は、調整する必要があります。
TargetFiles タグを追加するときは、新規 index 属性の値が、他の index 属性の値と衝突していない
ことを検索して確認してください。 TargetFiles タグの index 属性の値を変更したときは、File タグの
description 属性も合わせて変更してください。
まとめてから、
ModuleX
TargetA
g1.c
g3.c
g3.c
g1.c
TargetB
g2.c
g3.c
TargetC
比較する各種ターゲットを１つのフォルダーにまとめて、
の SyncFilesT_new コマンドを実行すると、
vbslib のショートハンド・プロンプト
SyncFilesT の設定ファイルが、指定したフォルダーの親フォルダーにできます。
_SyncFilesT_ModuleX.xml
→ 詳細
上記は、TargetC の g2.c ファイルが、TargetA, TargetB の g1.c ファイルと同期をとるように
調整済みです。
<< SyncFilesT
File タグを追加するときは、新規 kind 属性の値が、他の kind 属性の値と衝突していないことを
検索して確認してください。 File タグの kind 属性の値を変更したときは、CommittedFile タグの
→ CommittedFile タグのサンプル
revision 属性も合わせて変更してください。
… このフォルダーを指定します。
← ▼ ▲
ファイルの同期手順
<< SyncFilesT
あるターゲットの１つのファイルに更新があったとき、SyncFilesT が表示する表は、下記のように変わります。
なお、表の中の 01＼A（ブラウザーによっては 01\A） の 01 は、リビジョン番号、A は、ターゲットの
description 記号です。 description 記号が同じなら、同じ内容のファイルであるべきことを表します。
kind 値または上記の番号またはコマンド名>1
-------------------------------------------------------------------------------
1)
Enter のみ：終了
c+番号：ターゲット間でコピーする
Target Number (Left or c+Source) >c1
Enter のみ：コピー終了
Target Number (Destination) >2
source_path = "C:\TargetA\g1.c"
destination_path = "C:\TargetB\g1.c"
コピーします。[Y/N]y
TargetA の g1.c ファイルの内容をすべて TargetB の g1.c ファイルにコピーするときは、次の黄色い
文字のように入力していってください。 ただし、コピー元のターゲット番号を入力するときは、番号の
先頭に c を付けてください。
1
c1
2
表の内容が、new_* （例：new_1＼A、ブラウザーによっては new_1\A）のときは、まだコミット（確定）してい
ないことを表しています。
コミット（確定）するには、
SyncFilesT の設定ファイル
に、以下のような CommittedFile タグを追加します。
<CommittedFile hash="9a0baa2ed090b16796c55c156b5ffca9" revision="ModuleX\1\02\A"/>
この CommittedFile タグは、ModuleX モジュールに含まれる、ファイルの kind 番号= 1、リビジョン
番号= 02、ターゲットの description 記号= A、のファイルをコミットしたことを表しています。 その
ファイルの内容に対応する
MD5 ハッシュ値
は、9a0baa2ed090b16796c55c156b5ffca9 です。
更新が必要ないファイルについても、リビジョン番号を更新したコミットをしてください。 このコミットに
より、更新内容を反映する必要がなかったことが表わせます。 すべてのファイルがコミット済みであっ
ても、リビジョン番号が異なれば、まだ反映していないとして、Modified の列に * が表示されます。
下記の表は、TargetA の更新内容を TargetB とTagetC に反映した結果、TargetC には変更がなかっ
たので、TargetA と TargetB に対してのみ新しい CommittedFile タグを追加したときの表です。 リビジョン
番号が小さい TargetC を、リビジョン番号01 から 02 に上げるように、MD5 ハッシュ値が同じ下記のような
CommittedFile タグを追加してください。
追加する CommittedFile タグに近い内容は、98. 詳細を表示する [ShowDetail] を選ぶと開くファイルの
最後に書かれています。 この詳細ファイルは、97. リロード で更新されます。 ただし、リビジョン番号は、
すでにある番号と異なる番号に変更する必要があります。 また、ターゲットの description 記号は、正しく
修正しなければならないことがあります。
更新があったファイル（TargetA の g1.c）の更新内容を、他のターゲットのファイル（TargetC の g1.c）に
ターゲット間で比較するファイルの kind 値を入力してください。
1. kind 値 1 のファイルを比較する
2. kind 値 2 のファイルを比較する
:
97. 再スキャンして、一覧を表示する [Reload]
98. 詳細を表示する [ShowDetail]
96. HTML ファイルを保存する [SaveHTML]
99. 終了 [Exit]
kind 値または上記の番号またはコマンド名>1
-------------------------------------------------------------------------------
1)
Enter のみ：終了
c+番号：ターゲット間でコピーする
Target Number (Left or c+Source) >1
Target Number (Right) >3
1
1
3
または
Diff ツール
SyncFilesX ツール
Diff ツールで（TargetC を）同期させた後、リロード（Enter で戻ってから 97. Reload）すると、次のように
表示が変わります。
TargetB は、TargetA と同じ内容になるべきなので、後述のようにコピーして同期します。
y
（TargetB に）コピーして同期させた後、リロード（Enter で戻ってから 97. Reload）すると、次のように
表示が変わります。
CommittedFile タグを追加した後、リロード（Enter で戻ってから 97. Reload）すると、次のように表示が
変わります。 同期する前に比べてリビジョン番号が増えています。 Modified の列が空欄になったら、
同期完了です。 96. HTML ファイルを保存 [SaveHTML] しておくとよいでしょう。
<CommittedFile hash="a307d745bf90d586726f52a0689258fb" revision="ModuleX\1\02\B"/>
:
<Committed____ hash="a307d745bf90d586726f52a0689258fb" revision="ModuleX\1\01\B"/>
… 追加
… 既存
現在、同じハッシュ値の CommittedFile タグは、最新リビジョンにしか付けられません。
既存の CommittedFile タグのタグ名を変えるなどして無効にしてください。
SyncFilesX ツール
MD5 リスト
を設定ファイルの HashList
が起動します。
反映して同期するときは、下記の黄色い文字のように入すると
が開くので、手動で同期してください。 前回、同期した内容の
タグに指定したときだけ、前回、同期したときの内容とも比較ができる
→ コミット済の設定ファイルのサンプル
← ▼ ▲
SyncFilesT の設定ファイルの詳細
/SyncFilesT/ModuleFiles
（1つ）
モジュールを構成するファイルの集合
@module_name
子ノードに指定するファイルが所属するモジュールの名前。
/SyncFilesT/ModuleFiles/TargetFiles
（1つ、または、複数）
ターゲット。 モジュールの子ノード
@index
@target_name
@path
ターゲットの名前。 表の列のタイトルに表示されます。
ファイルが入ったフォルダーのパス。 相対パスの基準は、設定ファイルが
入っているフォルダー。
このターゲットに対応する description 属性の値の中の要素番号。 先頭は 1。
複数のターゲットで同じ要素番号を共有することも可能です。
/SyncFilesT/ModuleFiles/File
（1つ、または、複数）
ファイル。 モジュールの子ノード
@kind
@description
@name
@line_num
Kind値。 ファイルの種類を表す番号。 ターゲットが異なるときにファイル名が
異なるときに、同じ番号を割り当て、比較対象にします。
Description値。 同じ内容であるべきファイルを表す文字の並び。CSV形式。
空白文字は、ファイルが存在しないことを表します。
ファイル名。
FA File Name 形式
設定ファイル内の行番号。 自動的に更新されます。
/SyncFilesT/ModuleFiles/CommittedFile
（０、1つ、または、複数）
コミットしたファイルのリビジョン
@hash
ファイルの内容のハッシュ値。 MD5形式。
@revision
リビジョン。 形式は、モジュール名\Kind値\リビジョン番号\Description値。
例： ModuleX\1\01\A
/SyncFilesT/HashList
（０、または、1つ）
コミットしたファイルの場所
@path
MD5 リスト
のパス
１つのモジュールに対して、複数の ModuleFiles タグを指定できます。
。 同じ名前のファイルが１つしかないときは、
フォルダー名を指定する必要はありません。
<< SyncFilesT
詳細
参考
→ 新規作成
→ サンプル
← ▼ ▲
SyncFilesX
同じ、または、ほぼ同じ内容に保つことが求められる２つのファイルがあるとき、その片方または両方
の内容がそれぞれで更新されても、改めて同じ、または、同様の差分があるように戻す（同期する）
ことを支援します。 前回 同期したときの内容のとの差分も確認できるので、差分が追加すべき内容
なのか、削除すべき内容なのかを確認することもできます。
SyncFilesX スクリプト
'------------------------------------------------------------[FileInScript.xml]
'<SyncFilesX>
'<SynchronizingSet
' base_name="ModuleX : 環境A"
' work_name="ModuleX : 環境B"
' base="..\Project\Base"
' path="..\Project\Work"
' synced_base="_synced\1_Base"
' synced_path="_synced\1_Work">
'
'<File path="Image.bmp"/>
'<File path="SourceCpp.cpp" base="Source.c"/>
'
'<Folder same="yes" path="SubFolder"/>
'<File same="no" path="SubFolder\porting.c"/>
'
'<Folder same="clone" path="CloneFolder"/>
'
'</SynchronizingSet>
'</SyncFilesX>
'-----------------------------------------------------------[/FileInScript.xml]
Sub Main( Opt, AppKey )
SyncFilesX_App AppKey, new_FilePathForFileInScript( Empty )
End Sub
'--- start of vbslib include ------------------------------
： （vbslib をインクルードして main を呼び出すコード）
環境A用フォルダー
環境B用フォルダー
ほぼ同じ内容に保つ
Image.bmp
Image.bmp
Source.c
SourceCpp.cpp
printf( "Hello!\n" );
std::cout << "Hello!" << std::endl;
（ Source.c とペア）
ペアとなるファイルの内容が適切な関係にある状態（同期された状態）になったら、コミットと呼ぶ
操作をします。 SyncFilesX におけるコミットは、同期された状態のコピーを作成することです。
コミットした後は、ペアの片方のファイルを更新しても、コミット時のファイルのコピーがあるので、
それを参考に、もう片方のファイルを更新することができます。 ただし、更新をどのように反映
させるべきかは Diff ツールを使って人間が反映させてください。
同期管理フォルダー (_patch or _synced)
SyncFilesX （メイン・スクリプト）
前回、同期したときの環境A用フォルダー
前回、同期したときの環境B用フォルダー
[ 親: スクリプト・データ・ファイル (vbslib付属) ]
コミットしたらここにコピーされる
vbslib include
SyncFilesX.vbs
SyncFilesX を使うときは、Diff ツールが必要です。
→ Setting_getDiffCmdLine
設定部分の行頭には、' が必要です。
→ new_FilePathForFileInScript
関連
→ IsSynchronizedFilesX
<SyncFilesX>
<Variable name="${Synced}" value="_synced"/>
<SynchronizingSet
base_name="ModuleX : 環境A"
work_name="ModuleX : 環境B"
base="B"
path="W"
synced_base="${Synced}\BaseSub"
synced_path="${Synced}\WorkSub">
<File path="UpdateBoth.txt"/>
</SynchronizingSet>
</SyncFilesX>
FileInScript.xml に書く設定には、以下の SynchronizingSet タグを使用できます。
SynchronizingSet タグがあるときは、どの SynchronizingSet タグのセットを選択するかの
メニューが追加されます。
${Synced} は、Variable タグの変数の値に
置き換わります。
つまり、左の場合、
synced_base="_synced\BaseSub" になります。
Image.bmp ファイルに対するそれぞれのパスは次のようになります。
..\Project\Base\Image.bmp
環境A：
環境B：
前回、コミットしたときの環境B：
前回、コミットしたときの環境A：
_synced\Base\Image.bmp
..\Project\Work\Image.bmp
_synced\Work\Image.bmp
SourceCpp.cpp (Source.c) ファイルに対するそれぞれのパスは次のようになります。
same="no" が設定されているこのファイルは、同期しても内容が異なります。 ただし、
前回、同期した内容との差分を、同期相手に反映する必要があります。 same 属性
は、yes か no を明示的に指定することもできますが、省略すると前回の同期内容が
同じかどうかと今回の同期内容が同じかどうかが異なるときに警告します。
_synced\Work\SourceCpp.cpp
..\Project\Work\SourceCpp.cpp
_synced\Base\Source.c
前回、コミットしたときの環境A：
前回、コミットしたときの環境B：
環境B：
..\Project\Base\Source.c
環境A：
UpdateBoth.txt ファイルに対するそれぞれのパスは次のようになります。
_synced\WorkSub\UpdateBoth.txt
W\UpdateBoth.txt
_synced\BaseSub\UpdateBoth.txt
前回、コミットしたときの環境A：
前回、コミットしたときの環境B：
環境B：
B\UpdateBoth.txt
環境A：
また、Variable タグを使って、変数を定義できます。
Variable タグで定義した変数の参照は、
path, base, synced_path, synced_base
に指定できます。
→ new_LazyDictionaryClass
→ new_PathDictionaryClass_fromXML
File タグと Folder タグについての補足
SubFolder フォルダーは、フォルダーの中にある（サブフォルダーも含めた）ファイルが
同期対象です。 ただし、SubFolder\porting.c ファイルは、同期しても内容が異なります。
前回、コミットしたときのファイルやフォルダーのパスを指定するときは、synced_base
属性や synced_path 属性を記述します。
同期をとるファイルやフォルダーを設定します。
環境Aをアプリケーション環境（統合）、環境Bを個別環境（ベース以外の単体）とすることが
よくあります。
→ ヒント
下記のサンプルのような .vbs ファイルを作成してください。
親子関係（統合-個別関係）ではないときは、更新が多い方のフォルダーの中の同期管理フォル
ダーに、「SyncFilesX による同期は、関係先のフォルダーにあります」のようなメモだけあると
よいでしょう。 そこに、関係先のモジュール名の一覧があるとよいでしょう。
構成するモジュールごとに、同期管理フォルダーを作成するとよいでしょう。
→ SyncFilesX_Class
SynchronizingSet タグの ID 属性を指定すると、その値が画面に表示されます。
例： <SynchronizingSet ID="A" ... と指定すると 1. [A] と表示。
SyncFilesX タグの used_ID 属性を指定すると、ID 属性が一致する SynchronizingSet タグ
だけ有効になります。
例： <SyncFilesX used_ID="A" ... と指定すると、<SynchronizingSet ID="A" ... のみ有効。
ソース
→ SyncFilesX ソース
→ スクリプト・データ・ファイル (vbslib)
→ UpdateModule
番号またはコマンド >SyncFilesX
-------------------------------------------------------------------------------
>SyncFilesX
同じ、または、ほぼ同じ２つのフォルダー（またはファイル）があって、その両方または
片方の内容を更新したときに、その２つを同期（マージ）することを支援します。 ただ
し、この作業では、前回同期したときの２つのバックアップが必要です。
４つのパス（NewWork, NewBase, SynchronizedWork, SynchronizedBase）を入力してくだ
さい。
NewWork：新しいワークのフォルダーまたはファイルのパス>
NewBase：新しいベースのフォルダーのパス>
SynchronizedWork：前回同期したときのワークのフォルダーのパス>
SynchronizedBase：前回同期したときのベースのフォルダーのパス>
前回コミット時のベース: "_synced\Base"
前回コミット時のワーク: "_synced\Work"
*:同期されていないファイル、=:未同期でワークとペースの内容が同じ
-------------------------------------------------------------------------------
■ベース（ModuleX : 環境A）: "..\Project\Base"
■ワーク（ModuleX : 環境B）: "..\Project\Work"
1. .=. Image.bmp
2. *!. SourceCpp.cpp
91. 再スキャンして一覧する
92. ルート・フォルダーを開く
99. 終了
番号 >2
-------------------------------------------------------------------------------
ベース：C:\ProjectX\Project\Base\Source.c"
ワーク：C:\ProjectX\Project\Work\SourceCpp.cpp"
ベース・ファイルとワーク・ファイルは「同じ内容」でした
手動で同期したら、コミットしてください。
-------------------------------------------------------------------------------
★ベース（ModuleX : 環境A）: Source.c (変更)
★ワーク（ModuleX : 環境B）: SourceCpp.cpp (不変)
1. Diff で開く：同期するファイル (*異なる) [ ベース / ワーク ]
2. Diff で開く：前回の同期 (=同じ) [ ベース / ワーク ]
4. Diff で開く：ベース (変更) [ 前回コミット時 / 現在 ]
5. Diff で開く：ワーク (不変) [ 前回コミット時 / 現在 ]
44.Diff で開く：[ 前回コミット時のベース / ベース / ワーク ]
55.Diff で開く：[ ベース / ワーク / 前回コミット時のワーク ]
6. ファイルまたはフォルダーを開く
7. 再スキャンする
8. 同期をコミットする
9 または Enter : 戻る
番号 >
SyncFilesX
PatchAndBackUp
の更新内容を見ることにも使えます。
→ SyncFilesX スクリプト
概要
→ 概要
→ その他のヒント
テスト
→ SyncFilesX ソース
<File path="SourceCpp.cpp" base="Source.c"
synced_path="OldSourceCpp.cpp" synced_base="OldSource.c"/>
→ SyncFilesMenuLib.vbs
→ ファイルの改名・結合・分離・部分移動があったとき
→ T_SyncFilesX フォルダー
→ ModuleAssort
また、フォルダーを同期するときは、同期をとる必要があるファイルを一覧します。
ペアにするファイル名や相対パスが異なるときでも対応できます。
→ SyncFilesT
→ SyncFilesX ソース
→ SyncFilesX を内部で使うツールとの比較
←
↓