ファイルやフォルダー比較の際、比較範囲を限定するためにファイルフィルターを使用することができます。 これは、比較結果から、あなたが興味のない差異を取り除きたい場合に便利です。 フィルターは、正規表現を基づいて定義されます。 WinMerge は、一般的に広く使われている PCRE (Perl Compatible Regular Expressions) 正規表現エンジンを使用しています。
フィルターの基本機能はシンプルです。 比較対象となる各項目(フォルダー、ファイル、ファイル中の行)を評価し、 対象の項目がフィルター式にマッチした場合、フィルターを適用します。 フィルタータイプにより、項目は、比較に含められるか、除外されるかのどちらかです。
フォルダー比較用とファイル比較用の異なるWinMergeフィルターがあります。
単純なファイルマスク、または、より複雑なフィルターにより、 ファイルフィルター中で指定された複数の規則を適用することで、 フォルダー比較中に含めるファイルを指定することができます。
フィルターされるファイルやフォルダーは、デフォルトで隠されます。それは、典型的にあなたが望むものでしょう。フィルターされたアイテムを表示するには、 → をクリックしてください。しかし、フォルダー比較ウィンドウは、それらについて最小限の情報しか表示しません。例えば、あなたは、スキップされたファイルがテキストファイルかバイナリファイルか判らないでしょう。
表示ファイル/フォルダーフィルターはフォルダー比較操作でも利用できます。ファイルフィルターとは異なり、比較結果には影響しません。フォルダー比較ウィンドウに表示されるアイテムを制御するだけです。「表示ファイル/フォルダーフィルターの使用」 を参照してください。
行フィルターは、ファイル比較操作のみに適用されます。 それにより、単一行の差異を無視することができます。
置換フィルターは、ファイル比較操作のみに適用されます。 置換フィルターは、diffブロック内の文字列を指定された文字列に置換して比較し、 結果が一致する場合はそのdiffブロックを無視します。 これは、興味のない多数の変更を無視するのに役立ちます。
表示行フィルターもファイル比較操作にのみ適用されます。行フィルターとは異なり、比較結果には影響しません。ファイル比較ウィンドウに表示される行を制御するだけです。「表示行フィルターの使用」 を参照してください。
フォルダー比較で含めるファイル拡張子を指定するために、1つ以上のファイルマスクを使用できます。その他のファイルは選択対象から除外されます。
フォルダー比較操作を実行時に、ファイルマスクを定義し適用する:
ファイルまたはフォルダーの選択ダイアログを使用しているなら、 1(左)と 2(右)のフォルダー選択後、 フィルターフィールドへ、 1つか複数のファイルマスクを入力してください。 マスクは、フォルダー比較操作を開始した時に適用されます。
WinMergeのコマンドラインを使用している場合は、ファイルマスクを指定する
-fフラグ(次のセクションの例を参照)を使用してください。
ファイルマスクや拡張フィルターは以下の形式で指定できます:
グループ1のフィルター1;フィルター2 ...|グループ2のフィルター1;フィルター2 ...|...
| 文字はフィルターグループを区切り、論理 AND として機能します。
同じグループ内のフィルターは ; で区切られ、論理 OR として解釈されます。
ファイルは各グループ内の少なくとも1つのフィルターに一致する場合にのみ含まれます。
f: や f!: など、ダブルクォートで囲まれていない正規表現内で
|(パイプ)文字をリテラルとして使用したい場合は、代わりに ||
を使用してください。
例: f:(abc||def)\.txt$
各フィルター(例: Filter1, Filter2)は、以下のいずれかのタイプにすることができます:
*.ext拡張子によるファイルマスク(例: *.txt)
*.拡張子のないファイル(例: README)
*.ext指定した拡張子に一致するファイルを除外(2.16.19 以降で使用可能)
folder\対象フォルダー(末尾は必ず \ にする)(2.16.19 以降で使用可能)
folder\一致するフォルダーを除外(2.16.19 以降で使用可能)
正規表現正規表現を使用してファイル名を一致(2.16.49 以降で使用可能)
正規表現正規表現に一致するファイルを除外(2.16.49 以降で使用可能)
正規表現正規表現を使用してフォルダー名を一致(2.16.49 以降で使用可能)
正規表現正規表現に一致するフォルダーを除外(2.16.49 以降で使用可能)
式ファイルに対するフィルター式(例: fe:Size < 1KB)(2.16.49 以降で使用可能)
式ファイルを除外するためのフィルター式(2.16.49 以降で使用可能)
式フォルダーに対するフィルター式(2.16.49 以降で使用可能)
式フォルダーを除外するためのフィルター式(2.16.49 以降で使用可能)
ファイルフィルター名名前でファイルフィルターを適用(2.16.49 以降で使用可能)
例1 ファイルマスク
このコマンドラインの例では、フォルダー比較操作は拡張子 xml または
txt のファイルのみを対象とし、それ以外のファイルは省略されます。
WinMergeU c:\project\docs c:\temp /f *.xml;*.txt
例2 フォルダーの除外(2.16.19以降)
このコマンドラインの例では、フォルダー比較操作は、 .gitと
.vsフォルダーを除外します:
WinMergeU c:\project\docs c:\temp /f !.git\;!.vs\
例3 フィルター式(バージョン 2.16.49 以降)
このコマンドラインの例では、フォルダー比較操作は cpp または h
の拡張子を持ち、かつサイズが 1KB 未満のファイルのみを対象とします:
WinMergeU c:\project\docs c:\temp /f "*.cpp;*.h|fe:Size <
1KB"
WinMerge では、ファイルのメタデータ、内容、比較コンテキストに対して動作する強力なフィルタ式を使用できます。本セクションでは、サポートされる属性、演算子、関数、データ型、および評価ルールについて説明します。
サポートされるリテラルの型は以下の通りです:
Boolean:
true、false
Null: none(null または欠損値を表します)
Integer: 64ビット符号付き整数 (例: 1024,
100KB, 7days などの単位付きも可能)
Real (Double): 小数点または指数部を任意に含む浮動小数点数 (例:
3.14, .5, 1e6)
String: ダブルクォートで囲まれた文字列 (例:
"example")
Date/Time: d プレフィックスを付けてダブルクォートで囲みます
(例: d"2026-05-21
07:16:33"、d"2026-05-21")
内部的に扱われる型は以下の通りです: Boolean, Integer, Real, Timestamp, String, File Content,
Array, or none.
フィルタ式は、式の評価方法を制御するディレクティブをサポートしています。ディレクティブは式の先頭に指定し、@
を付けて記述し、式本体とは空白で区切ります。
デフォルトでは、すべての文字列比較演算子(=、!=、<、<=、>、>=、contains、recontains、like、matches)は大文字小文字を区別しません。この動作は次のディレクティブで制御できます。
@cs, @casesensitive
大文字小文字を区別する比較を有効にします。これらのディレクティブを指定すると、"ABC" と
"abc" は異なるものとして扱われます。
@ci, @caseinsensitive
大文字小文字を区別しない比較を有効にします(デフォルトの動作)。これらのディレクティブを指定すると、"ABC" と
"abc" は同一として扱われます。
例4 大文字小文字の区別の例
@cs Name = "README.txt" ## 大文字小文字を区別: "README.txt" のみ一致 @ci Name = "readme.txt" ## 大文字小文字を区別しない: "README.txt", "readme.txt", "ReadMe.TXT" などに一致 @casesensitive Extension = "TXT" ## 大文字小文字を区別: 拡張子 ".TXT" のファイルのみ一致 @caseinsensitive Content contains "error" ## 大文字小文字を区別しない: "Error", "ERROR", "error" などに一致
デフォルトでは、フィルタ式はパフォーマンス向上のために最適化されます。この動作は次のディレクティブで制御できます。
@optimize, @optフィルタ式の最適化を有効にします(デフォルトの動作)。複雑な式の場合、パフォーマンスが向上する可能性があります。
@nooptimize, @nooptフィルタ式の最適化を無効にします。デバッグ時や、最適化によって予期しない結果が発生する場合に役立ちます。
例5 最適化の例
@optimize Size > 10MB and Extension = "log" ## 最適化を有効(デフォルト) @noopt Name matches "complex[0-9]+pattern" ## デバッグのため最適化を無効 @nooptimize Content contains "special-case" ## 最適化を無効
@name
ディレクティブを使用すると、フィルタ式に説明用の名前を付けることができます。この名前はエラーメッセージやログで使用され、どのフィルタ式が問題を引き起こしたかを識別するのに役立ちます。
@name="Filter Name", @name=FilterNameフィルタ式に名前を付けます。名前に空白や特殊文字を含む場合は、二重引用符で囲む必要があります。空白を含まない名前は引用符なしで指定できます。
指定した名前は、エラーメッセージや診断出力でフィルタを識別するために使用されます。複数の複雑なフィルタ式を扱う場合に特に便利です。
例6 Name ディレクティブの例
@name="Large Image Files" Size > 10MB and Extension = "png" @name=SmallTextFiles Size < 1KB and Extension = "txt" @name="Modified Today" Date >= today() @name="Test Filter" @cs Name like "test_*.cpp"
@name
ディレクティブは他のディレクティブと組み合わせて使用できます。複数のディレクティブを使用する場合は、すべて式の先頭に記述し、空白で区切ります。
フィルタ式では、ファイルのメタデータや内容を参照する多様な属性が利用できます。属性名の大文字・小文字は区別されません。必要に応じて、比較対象のどの側(Left, Right, Middle)かを接頭辞で指定できます。
Existsファイルが存在する場合は true を返し、存在しない場合は false
を返します。
Nameファイル名
BaseName拡張子を除いたファイル名を返します。たとえば、"document.txt" は "document" を返します。
Extensionファイル拡張子
IsFolder項目がフォルダー/ディレクトリの場合は true を返し、ファイルの場合は false を返します。
Folderファイル名およびベースフォルダーを除いた相対パスを返します。
RelPath比較ルートディレクトリからの相対パスを、フォルダーパスとファイル名を含めて返します。例えば、"C:\Project" を比較していて、ファイルが "C:\Project\src\main.cpp" にある場合、RelPath は "src\main.cpp" を返します。
FullPathファイルのフルパスを返します。
Sizeファイルサイズ
Date最終更新のタイムスタンプ
DateStryyyy-MM-dd 形式の最終更新日付の文字列を返します。
CreationTime作成日時のタイムスタンプを返します。
Attributesファイル属性を整数値で返します。
AttrStrファイル属性の文字列を返します。例:"R" は読み取り専用、"H"
は隠しファイル、"A" はアーカイブ、"S" はシステムファイルを示します。
以下の属性は、ファイル比較項目にのみ使用できます。フォルダー項目に使用した場合の動作は未定義です。
Contentファイルの内容を表します。FileContent 型の値を返します。この型には contains および
recontains のみ使用できます。
以下の属性は、フォルダー比較項目にのみ使用できます。ファイル項目に使用した場合の動作は未定義です。
Filesフォルダーに直接含まれるファイル数。
RecursiveFilesすべてのサブフォルダーを含めた、フォルダー内のファイル総数。
Itemsフォルダーに直接含まれる項目(ファイルおよびサブフォルダー)の数。
RecursiveItemsすべてのサブフォルダーを含めた、フォルダー内の項目(ファイルおよびサブフォルダー)の総数。
TotalSizeフォルダーに直接含まれるすべてのファイルの合計サイズ(バイト単位)。
RecursiveTotalSizeすべてのサブフォルダーを含めた、フォルダー内のすべてのファイルの合計サイズ(バイト単位)。
比較対象のファイルの側を指定するために、接頭辞を追加できます:
Left: 左側のファイルに適用されます(例: LeftSize)
Right: 右側のファイルに適用されます(例: RightDate)
Middle: 3方向比較における中央のファイルに適用されます(例:
MiddleName)
接頭辞のない属性(例: Size)は、左・中央・右のすべての側の値を含む配列を返します。
これらの属性は、Windows プロパティ システムで定義されたメタデータ (例:
System.Title、System.FileOwner、System.Image.HorizontalResolution
など)にアクセスするためのものです。
Prop
指定した正規プロパティ名に対応するプロパティ値の配列(Left、Middle、Right)を返します。例:
prop("System.Title")
LeftProp
左側のファイルのプロパティ値を返します。例: leftprop("System.FileOwner")
MiddleProp中央のファイル(3-way 比較時)のプロパティ値を返します。
RightProp右側のファイルのプロパティ値を返します。
以下の属性は表示フィルター専用として設計されています(フィルター欄で
e:、e!:、fe:、fe!:、de:、de!:
プレフィックスを指定)。これらは比較が完了していることを前提とするため、ファイルフィルター(.flt)のインクルード/エクスクルードルールでは使用しないでください。予期しない動作の原因となる可能性があります。
Identical
比較結果が項目が同一であることを示す場合は true、それ以外の場合は
false を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Identical と指定すると同一ファイルのみを表示します。
Different
比較結果が項目が異なることを示す場合は true、それ以外の場合は
false を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Different と指定すると差異のあるファイルのみを表示します。
Skipped
エラーやフィルタールールにより比較がスキップされた場合は true、それ以外の場合は
false を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Skipped と指定するとスキップされた項目のみを表示します。
Binary
ファイルがバイナリとして検出された場合は true、テキストの場合は
false、ファイルが存在しない場合は none
を返します。この属性はサイド別プレフィックス(例:
LeftBinary、RightBinary)に対応しています。例:
allof(Binary) と指定すると、すべての側でバイナリであるファイルを表示します。
DifferentLeftMiddle
3方向比較において左と中央のファイルが異なる場合は true、それ以外は
false を返します。2方向比較では none
を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例: DifferentLeftMiddle and not
DifferentMiddleRight と指定すると、左のみが中央と異なるファイルを見つけることができます。
DifferentMiddleRight
3方向比較において中央と右のファイルが異なる場合は true、それ以外は
false を返します。2方向比較では none
を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
DifferentMiddleRight と指定すると、中央と右が異なるファイルを表示します。
DifferentLeftRight
3方向比較では左と右のファイルが異なる場合に true、それ以外は
false を返します。2方向比較では両方のファイルが存在し、かつ異なる場合に
true を返します。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
DifferentLeftRight と指定すると、左と右が異なるファイルを表示します。
Differences
ファイル比較におけるテキスト差分の数を返します。この属性は比較済みのテキストファイルに対してのみ有効です。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
Differences > 0
と指定すると差分のあるファイルを表示し、Differences > 10
と指定すると差分が10個を超えるファイルを表示します。
IgnoredDiffs
ファイル比較において無視された差分の数(行フィルターや空白設定により除外された差分)を返します。この属性は比較済みのテキストファイルに対してのみ有効です。これはグローバル属性(サイド別プレフィックスは使用不可)です。例:
IgnoredDiffs > 0
と指定すると無視された差分があるファイルを表示し、Differences = 0 and IgnoredDiffs >
0 と指定すると無視された差分を除けば同一であるファイルを表示します。
Unpacker
ファイル比較に使用された展開プラグインの名前を返します。展開プラグインが使用されていない場合は空文字列を返します。これはグローバル属性であり(左右別のプレフィックスには対応していません)。例:
Unpacker = "CompareMSExcelFiles" は Excel
展開プラグインを使用して比較されたファイルを表示し、Unpacker != ""
は展開プラグインが使用されたすべてのファイルを表示します。
Prediffer
ファイル比較に使用された比較前処理プラグインの名前を返します。比較前処理プラグインが使用されていない場合は空文字列を返します。これはグローバル属性であり(左右別のプレフィックスには対応していません)。例:
Prediffer = "IgnoreColumns" は IgnoreColumns
比較前処理プラグインを使用して比較されたファイルを表示し、Prediffer != ""
は比較前処理プラグインが使用されたすべてのファイルを表示します。
EOL行末 (EOL) スタイルを整数値として返します。ファイルに対しては主要な EOL スタイルを返し、行に対してはその行の EOL スタイルを返します。
値: 0 = なし、1 = LF (Unix)、2 = CR (Mac)、3 = CRLF (Windows)、4 = 混在(ファイル内に複数の EOL スタイルあり)
EOLStr行末(EOL)の形式を文字列として返します。ファイルの場合は、そのファイルで主に使用されている行末形式を返し、行の場合は、その特定の行の行末形式を返します。
行末 (EOL) スタイルを文字列として返します。ファイルに対しては主要な EOL スタイルを返し、行に対してはその行の EOL スタイルを返します。
Codepage
ファイルのコードページ(文字エンコーディング)を整数値で返します。この属性はサイド別プレフィックス(例:
LeftCodepage、RightCodepage)に対応しています。例:
Codepage = 65001 と指定すると UTF-8
のファイルを表示し、allof(Codepage = 65001) と指定するとすべての側で UTF-8
のファイルを表示します。
HasBOM
ファイルに Byte Order Mark(BOM)がある場合は true、それ以外の場合は
false を返します。この属性はサイド別プレフィックス(例:
LeftHasBOM、RightHasBOM)に対応しています。例:
HasBOM と指定すると BOM のあるファイルを表示し、not
HasBOM と指定すると BOM のないファイルを表示します。
接頭辞のない属性(例:
Size)は、左・中央・右のすべての側からの値を含む配列を返します。これらの配列に対して演算子を適用する場合、比較対象がスカラーか他の配列かによって動作が異なります。
配列とスカラーを比較する場合、演算は各配列要素に対して個別に適用され、結果はブール値の配列になります。このブール配列に
true が1つでも含まれていれば、全体の評価結果は true
になります。すべてが false であれば false になります。
2つの配列を比較する場合、挙動は演算子によって異なります:
= および !=
の場合:配列の長さが同じである必要があります。結果は配列ではなく単一のブール値になります。=
はすべての要素が一致する場合のみ true を返し、!=
はいずれかの要素が異なる場合に true を返します。
他のすべての演算子(例: >,
<)では、各要素ごとに演算が適用され、ブール値の配列が生成されます。この配列に
true が1つでも含まれていれば、式全体の評価結果は true
になります。すべてが false の場合は false になります。
例8 例
[2, 4] = [2, 4] -> true
[2, 4] != [2, 5] -> true (4 != 5 だから)
[3, 5, 8] > [6, 4, 2] -> [false, true, true] -> true (少なくとも1つの比較が true だから)
デフォルトでは、すべての文字列比較演算子(=、!=、<、<=、>、>=、like、matches、contains、recontains)は大文字小文字を区別しません。この動作はディレクティブで制御できます(「大文字小文字の区別に関するディレクティブ」 を参照)。
<, <=, >,
>=数値、タイムスタンプ、または文字列の比較
=等価比較
!=不等比較
+, -, *,
/, %
算術演算子。+ と -
は加算および減算、* と /
は乗算および除算、% は剰余演算(余り)を行います。
and, or, not論理演算子
likeワイルドカードによる文字列一致
not like を使用して逆の一致条件を指定することもできます。
matches正規表現による一致
not matches を使用して一致しない条件を指定することもできます。
contains文字列が部分文字列を含んでいるかを判定します
not contains を使用して部分文字列が含まれていないことを確認できます。
recontainsいずれかの部分文字列が正規表現に一致するかを判定します
not recontains を使用して一致しないことを確認できます。
フィルタ式は、データの操作や分析のためのさまざまな関数をサポートしています。関数は参照しやすいようにカテゴリ別に整理されています。
strlen(source)文字列の長さを Integer として返します。source
が文字列の配列である場合、結果は整数の配列になります。例: strlen(Name)
strCount(str,
substr)
str 内に部分文字列 substr
が出現する回数を数えます。デフォルトでは大文字・小文字を区別しません
(@cs/@ci
ディレクティブに従います)。str
が配列の場合、結果は各要素の件数を格納した整数配列になります。重複マッチは個別にカウントされます (例:
strCount("aaaa", "aa") は 2 を返します)。
例:
strCount("hello hello world", "hello") は 2 を返します
strCount("Test TEST test", "test") は 3
を返します(大文字・小文字を区別しない)
@cs strCount("Test TEST test", "test") は 1
を返します(大文字・小文字を区別する)
le:strCount(Line, "ERROR") > 2 は "ERROR" が 2
回以上含まれる行を表示します
regexCount(str,
pattern)
str 内で正規表現 pattern
がマッチする回数を数えます。デフォルトでは大文字・小文字を区別しません
(@cs/@ci
ディレクティブに従います)。str
が配列の場合、結果は各要素の件数を格納した整数配列になります。無限ループを避けるため、ゼロ長のマッチも適切に処理されます。
例:
regexCount("test123abc456", "\d+") は 2 を返します
regexCount("AAA BBB CCC", "[A-Z]+")は 3 を返します
@cs regexCount("Test TEST", "TEST") は 1 を返します
le:regexCount(Line, "\b(error|warning)\b") > 0 はerror または
warning キーワードを含む行を表示します
strFind(str,
substr[, occurrence])
str 内の部分文字列 substr の N
番目の出現位置 (0 基底) を返します。省略可能な occurrence
パラメータは何番目の出現を検索するかを指定します (0 基底、デフォルトは 0 で最初の出現)。デフォルトでは大文字・小文字を区別しません
(@cs/@ci
ディレクティブに従います)。部分文字列が見つからない場合や出現インデックスが範囲外の場合は none
を返します。str が配列の場合、結果は位置 (または none 値) の配列になります。
例:
strFind("hello world", "o") は 4 を返します (最初の 'o')
strFind("hello world", "o", 1) は 7 を返します (2 番目の 'o')
@cs strFind("Test TEST test", "test") は 10
を返します(大文字・小文字を区別する)
strFind(array("abc", "def"), "b") は array(1,
none) を返します
regexFind(str,
pattern[, group[,
occurrence]])
str 内で正規表現が N 番目にマッチする位置 (0 基底)を返します。省略可能な
group パラメータは検索するキャプチャグループを指定します (0 基底、デフォルトは 0
でマッチ全体)。省略可能な occurrence
パラメータはパターンの何番目の出現を検索するかを指定します (0 基底、デフォルトは 0 で最初の出現)。デフォルトでは大文字・小文字を区別しません
(@cs/@ci
ディレクティブに従います)。パターンがマッチしない場合、グループインデックスが範囲外の場合、または出現インデックスが範囲外の場合は
none を返します。str が配列の場合、結果は位置
(または none 値) の配列になります。
例:
regexFind("test123abc456", "\d+") は 4 を返します("123" の位置)
regexFind("test123abc456", "\d+", 0, 1) は 10 を返します ("456"
の位置、2 番目のマッチ)
regexFind("abc-def-ghi", "([a-z]+)-([a-z]+)", 1) は 0
を返します (最初のキャプチャグループ "abc" の位置)
regexFind("v1.0 and v2.5", "v(\d+)\.(\d+)", 1, 1) は 10
を返します (2 番目の出現のメジャーバージョン "2")
regexFind(array("test123", "abc"), "\d+") は
array(4, none) を返します
substr(source,
start, count)文字列または文字列の配列 から指定範囲の文字列を String
型で返します。source が文字列配列の場合、結果は文字列配列になります。例:
substr(Name, 0, 3)
replace(str, from, to)
文字列内に含まれる部分文字列 'from' をすべて 'to'
に置換します。strが文字列配列の場合、結果は文字列配列になります。例:
replace(name, "_old", "_new")
regexReplace(str, pattern, replacement)
正規表現 pattern に一致するすべての部分を replacement 文字列で置換します。replacement 文字列では後方参照($1、$2
など)を使用できます。strが文字列配列の場合、結果は文字列配列になります。例:
regexReplace(name, "^(\w+)(\w+)$", "$2$1") は、アンダースコアで区切られた単語の順序を入れ替えます。
replaceWithList(str, filepath)
タブ区切りファイルから読み込んだ置換ルールを使用して、str
内の複数の文字列を置換します。ファイル形式は 1 行につき 1
つの置換ルールで、search_string<TAB>replacement_string
の形式です。#
で始まる行はコメントとして扱われ、無視されます。空行も無視されます。str
が配列の場合、置換が適用された文字列の配列が結果として返されます。
ファイル形式の例:
# コメント行 apple orange cat dog old new
例:
replaceWithList(Name, "C:\Filters\replacements.txt") -
ファイル内の置換ルールをファイル名に適用します
regexReplaceWithList(str, filepath)
タブ区切りファイルから読み込んだ正規表現パターンを使用して、str
内の文字列を置換します。ファイル形式は 1 行につき 1
つのパターンで、regex_pattern<TAB>replacement_string
の形式です。置換文字列には、キャプチャされたグループへの後方参照 ($1, $2 など)
を含めることができます。#
で始まる行はコメントとして扱われ、無視されます。空行も無視されます。str
が配列の場合、置換が適用された文字列の配列が結果として返されます。
ファイル形式の例:
# コメント行
\d+ NUMBER
(\d{4})-(\d{2})-(\d{2}) $1_$2_$3
例:
regexReplaceWithList(Name,
"C:\Filters\regex_replacements.txt") - 正規表現による置換をファイル名に適用します
regexExtract(str,
pattern[, group[,
offset]])
文字列から正規表現パターンにマッチするテキストを取り出します。省略可能な group
パラメータは抽出するキャプチャグループを指定します (0 基底)。グループ 0 (デフォルト) はマッチ全体を返し、グループ 1、2
などはパターン内の括弧で定義された対応するキャプチャグループを返します。省略可能な offset
パラメータはパターンの何番目の出現を取り出すかを指定します (0 基底)。オフセット 0 (デフォルト) は最初のマッチを返し、オフセット 1 は 2
番目のマッチを返します。これは文字列内の 2 番目の数値など、行内の N
番目の出現を取り出す際に便利です。パターンがマッチしない場合、グループインデックスが範囲外の場合、またはオフセットがマッチ数を超える場合は
none を返します。str
が配列の場合、結果は各要素のキャプチャを格納した配列になります。デフォルトでは大文字・小文字を区別しません
(@cs/@ci ディレクティブに従います)。
例:
regexExtract("abc123", "[a-z]+\d+") は
"abc123" を返します(マッチ全体)
regexExtract("abc123", "([a-z]+)(\d+)", 1) は
"abc" を返します(最初のキャプチャグループ)
regexExtract("abc123", "([a-z]+)(\d+)", 2) は
"123" を返します(2 番目のキャプチャグループ)
regexExtract("2025-05-16", "(\d{4})-(\d{2})-(\d{2})", 1)
は "2025" を返します
regexExtract("user@example.com", "([^@]+)@([^@]+)", 1) は
"user" を返します
regexExtract("user@example.com", "([^@]+)@([^@]+)", 2) は
"example.com" を返します
regexExtract("value 123 and value 456", "(\d+)", 0, 0) は
"123" を返します(最初の数値)
regexExtract("value 123 and value 456", "(\d+)", 0, 1) は
"456" を返します(2 番目の数値)
regexExtract("v1.0.0 and v2.0.0", "v(\d+)\.(\d+)\.(\d+)", 1,
1) は "2" を返します(2 番目の出現のメジャーバージョン)
regexExtract("test", "\d+") は none
を返します(マッチなし)
regexExtract("abc", "([a-z])", 5) は
none を返します(グループが範囲外)
regexExtract(array("abc123", "def456"), "([a-z]+)(\d+)",
1) は array("abc", "def") を返します
@cs regexExtract("ABC123", "([a-z]+)", 1) は
none を返します(大文字・小文字を区別する、マッチなし)
le:regexExtract(Line, "error:\s+(\w+)", 1)
はログ行からエラー種別を抽出します
fe:regexExtract(Name, "v(\d+)\.(\d+)\.(\d+)", 1) = "2"
はメジャーバージョンが 2 のファイルをフィルタリングします
normalizeUnicode(str[, form])
Unicode 文字列を正規化します。省略可能な form パラメータで正規化形式を指定できます。指定可能な形式は "NFC" または
"C"(既定値)、"NFD" または "D"、"NFKC" または "KC"、"NFKD" または "KD" です。数値形式も指定できます:
1=NFC、2=NFD、5=NFKC、6=NFKD。strが文字列配列の場合、結果は文字列配列になります。例:
normalizeUnicode(name, "NFC")
toLower(str)
文字列内のすべての文字を小文字に変換します。str
が配列の場合、結果は小文字に変換された文字列の配列になります。例: toLower("Hello World")
は "hello world" を返します。
toUpper(str)
文字列内のすべての文字を大文字に変換します。str
が配列の場合、結果は大文字に変換された文字列の配列になります。例: toUpper("Hello World")
は "HELLO WORLD" を返します。
toHalfWidth(str)
全角文字を半角文字に変換します。主に全角の英数字やカタカナを半角に変換するために使用されます。str
が配列の場合、結果は変換された文字列の配列になります。
toFullWidth(str)
半角文字を全角文字に変換します。主に半角の英数字やカタカナを全角に変換するために使用されます。str
が配列の場合、結果は変換された文字列の配列になります。
toKatakana(str)
ひらがなをカタカナに変換します。ひらがな以外の文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
toHiragana(str)
カタカナをひらがなに変換します。カタカナ以外の文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
toSimplifiedChinese(str)
繁体字中国語を簡体字中国語に変換します。簡体字が存在しない文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
toTraditionalChinese(str)
簡体字中国語を繁体字中国語に変換します。繁体字が存在しない文字は変更されません。str
が配列の場合、結果は変換された文字列の配列になります。
trim(str)
文字列の先頭および末尾の空白文字(スペース、タブ、改行、復帰)を除去します。str
が配列の場合、結果はトリムされた文字列の配列になります。
例:
trim(" hello ") は "hello" を返します
trim(array(" test ", " data ")) は array("test",
"data") を返します
trimLeft(str)
文字列の先頭の空白文字(スペース、タブ、改行、復帰)を除去します。末尾の空白はそのまま保持されます。str
が配列の場合、結果は左トリムされた文字列の配列になります。
例:
trimLeft(" hello ") は "hello " を返します
trimRight(str)
文字列の末尾の空白文字(スペース、タブ、改行、復帰)を除去します。先頭の空白はそのまま保持されます。str
が配列の場合、結果は右トリムされた文字列の配列になります。
例:
trimRight(" hello ") は " hello" を返します
lineCount(content)ファイル内容またはファイル内容の配列の行数を Integer
として返します。content が配列の場合、結果は整数の配列になります。例:
lineCount(Content)
sublines(content,
start, count)
ファイル内容またはファイル内容の配列から、指定した開始行から指定行数の行を抽出し、連結した文字列として返します。content
が配列の場合、結果は文字列の配列になります。
toNumber(str),
toInt(str),
toDouble(str)文字列を数値に変換します。toNumber
は入力形式に応じて整数または浮動小数点数を返します。toInt
は整数のみを返します。toDouble
は浮動小数点数のみを返します。入力内のカンマは無視されます。パース失敗時は none を返します。例:
le:toInt(Column("Count")) > 100
toDateTime(str)
文字列をタイムスタンプ値に変換します。複数の日付・時刻形式をサポートします。文字列をパースできない場合は none を返します。例:
toDateTime("2025-01-15") > today()
now()現在の日時を Timestamp 型の値として返します。
today()本日の日付を、日の始まりである 00:00:00.000 を表す
Timestamp 型として返します。
startOfWeek(timestamp)週の初日(日曜日)を返します。ロケールには依存しません。
startOfMonth(timestamp)月の初日を返します。
startOfYear(timestamp)年の初日を返します。
toDateStr(timestamp)指定されたタイムスタンプをyyyy-MM-dd
形式の文字列に変換して返します。timestampがタイムスタンプ配列の場合、結果は文字列配列になります。
abs(value)整数または整数の配列 の絶対値を返します。value
が整数配列である場合、結果は整数配列になります。
isWithin(value,
min, max)
value が範囲 [min,
max](両端を含む)内にある場合に true
を返します。整数、浮動小数点数、タイムスタンプ、文字列(大文字小文字を区別しない比較)に対応しています。value
が配列の場合は、各要素を個別に評価した真偽値の配列を返します。
例:
isWithin(5, 1, 10) は true を返します
isWithin(Size, 1KB, 10MB) - いずれかのファイルサイズが 1KB から 10MB
の範囲内かを確認します
isWithin(Date, today() - 7days, today()) - ファイルが過去 1
週間以内に更新されたかを確認します
allof(isWithin(Size, 1KB, 10MB)) - すべてのファイルサイズが 1KB から
10MB の範囲内かを確認します
inRange(value,
min, max)
value が範囲 [min,
max)(下限を含み、上限を含まない)内にある場合に true
を返します。整数、浮動小数点数、タイムスタンプ、文字列(大文字小文字を区別しない比較)に対応しています。value
が配列の場合は、各要素を個別に評価した真偽値の配列を返します。
例:
inRange(5, 1, 10) は true を返します
inRange(10, 1, 10) は false を返します
inRange(Size, 0, 1MB) - いずれかのファイルサイズが 1MB 未満かを確認します
anyof(inRange(Date, startOfMonth(today()), today())) -
いずれかのファイルが今月(今日を除く)に更新されたかを確認します
array(value1,
value2, ...)指定された値から配列を作成します。例:array(1, 2, 3)
at(array,
index)指定されたインデックス(0から数える)の位置にある要素を返します。負のインデックスは末尾から数えます。例:at(array(1, 2,
3), -1) は3 を返します
anyof(booleans)ブール値の配列 のいずれかの要素が条件を満たす場合に true
を返します。
allof(booleans)ブール値の配列 のすべての要素が条件を満たす場合に true
を返します。
allequal(array)配列内のすべての値が等しい場合に true を返します。
len(value)値の長さを Integer として返します。
動作:
配列:配列に含まれる要素の数を返します
文字列: UTF-8 の文字数を返します
None (monostate): 0 を返します
その他のスカラー値(Integer、Real、Boolean、Timestamp など): 1 を返します
例:
len(array(1, 2, 3))- 3 を返します
len("hello")- 5を返します
len(123)- 1を返します
len(Size)- フォルダ比較における要素の数(2または3)を返します
if(condition,
trueValue, falseValue)
condition が true と評価された場合は
trueValue を返し、それ以外の場合は
falseValue
を返します。この関数は短絡評価を行います(返される側の分岐のみが評価されます)。
例:
if(Size > 1MB, "large", "small") - ファイルサイズに応じて "large"
または "small" を返します
if(Extension = "txt", "text file", "other file") -
拡張子によってファイルを分類します
if(Exists, Size, 0) - ファイルが存在する場合はサイズを、存在しない場合は 0 を返します
ifEach(conditionArray,
trueValue, falseValue)
要素ごとの条件付き選択を行います。conditionArray の各要素について、条件が true
の場合は trueValue の対応する要素を、false の場合は
falseValue
の対応する要素を返します。trueValue または
falseValue がスカラー値の場合は、すべての要素にブロードキャストされます。
例:
ifEach(Size > 1MB, "large", "small") - 各ファイルについて
"large" / "small" の配列を返します
ifEach(array(true, false, true), array("a", "b", "c"), array("x",
"y", "z")) - array("a", "y", "c") を返します
anyof(ifEach(Size > 100KB, Size < 10MB, false)) -
100KB 以上 10MB 未満のファイルが存在するかを確認します
choose(index,
value0, value1, ...)
index
に基づいて引数の中から値を選択します。index が 0 の場合は
value0 を、1 の場合は value1
を返します。負のインデックスは 0 として扱われます。最後の値を超えるインデックスが指定された場合は、最後の値を返します。
例:
choose(0, "first", "second", "third") - "first" を返します
choose(DiffCode % 3, "equal", "different", "unique") -
差異コードをラベルに対応付けます
choose(5, "a", "b", "c") - "c" を返します(範囲外のため最後の値が返されます)
chooseEach(indexArray,
value0, value1, ...)
要素ごとの値選択を行います。indexArray
の各インデックスに対して、残りの引数から対応する値を選択します。indexArray
がスカラー値の場合は choose と同じ動作になります。
例:
chooseEach(array(0, 1, 2), "a", "b", "c") -
array("a", "b", "c") を返します
chooseEach(array(0, 0, 1), "x", "y") -
array("x", "x", "y") を返します
chooseEach(array(2, 0, 1), "first", "second", "third") -
array("third", "first", "second") を返します
andEach(value1,
value2),
orEach(value1,
value2),
notEach(value)要素ごとの論理演算を行います。これらの関数は、真偽値、真偽値配列、またはその組み合わせに対して動作します。
andEach - 論理 AND 演算
orEach - 論理 OR 演算
notEach - 論理 NOT 演算(単一引数)
引数がスカラー値の場合はスカラーの真偽値を返します。一方が配列でもう一方がスカラー値の場合は、スカラー値がすべての要素にブロードキャストされます。両方が配列の場合は、要素ごとの演算が行われます。
例:
andEach(Size > 1KB, Size < 1MB) - 1KB 以上 1MB
未満のファイル
orEach(Extension = "txt", Extension = "log") - txt または
log ファイル
notEach(Exists) - 存在しないファイル
allof(andEach(Exists, Size > 0)) - すべてのファイルが存在し、サイズが 0
ではありません
anyof(notEach(Size > 1MB)) - 1MB 以下のファイルが存在します
logError(value1,
value2, ...),
logWarn(value1,
value2, ...),
logInfo(value1,
value2, ...)すべての引数の文字列表現を連結してログに出力します(それぞれエラー、警告、情報レベルで出力)。引数は空白で区切られ、最後の引数の値が関数の戻り値として返されます。これらの関数はフィルタ式のデバッグに便利です。
使用例(戻り値を利用する場合):
logInfo("ファイルサイズ:", Size) > 1MB -
ファイルサイズをログに出力し、1MBより大きいかを確認します
logWarn("処理中:", Name) like "*.tmp" -
ファイル名をログに出力し、テンポラリファイルかどうかを確認します
Size > 1KB and logInfo("大きなファイル:", Name) contains "test"
- サイズ条件が真の場合のみログ出力し、その後ファイル名をチェックします
ファイルサイズには以下の接尾辞を使用できます:
KB, MB, GB, TB時間の長さには以下の接尾辞を使用できます:
weeks, week, w, days, day, d, hours, hour, hr, h, minutes, minute, min, m, seconds, second, sec, s, milliseconds, millisecond, msec, msSize < 10KB - いずれかのファイルサイズが 10KB 未満
LeftSize >= 10MB - 左側のファイルサイズが 10MB 以上
allof(Size < 1MB) - すべてのファイルが 1MB 未満
abs(LeftSize - RightSize) < 1KB - サイズ差が小さい
DateStr = "2025-07-20" - その日に更新されたファイル
Date >= today() - 今日以降に更新されたファイル
日付 > d"2026-05-21 07:16:33"- 特定の日時以降に更新されたもの
isWithin(Date, d"2026-01-01", d"2026-12-31 23:59:59")-
2026年中に変更されたもの
isWithin(Date, today() - 7days, today()) -
過去1週間以内に更新されたファイル
inRange(Size, 1KB, 10MB) - ファイルサイズが1KB以上10MB未満
allof(isWithin(Size, 100KB, 1MB)) -
すべてのファイルサイズが100KBから1MBの範囲内
AttrStr contains "R" - 読み取り専用ファイル
Name matches "file[0-9]\.txt" - ファイル名に正規表現を適用
Content contains "Test" - 内容に "Test" を含む
sublines(Content, 0, 1) contains "XML" - 1行目に "XML" を含む
strCount(Content, "TODO") > 5 - ファイルに TODO コメントが 5
個以上含まれている
regexCount(Content, "\bFIXME\b") > 0 - ファイルに FIXME
マーカーが少なくとも 1 つ含まれている
strFind(Name, "_test") != none - ファイル名に "_test" を含むファイル
strFind(Name, ".", 1) > 0 - ファイル名に複数のドットがあるファイル(2
番目のドットが存在する)
regexFind(Name, "\d{4}") < 5 - 先頭 5 文字以内に
4桁の数字が出現するファイル
regexExtract(Name, "v(\d+)\.(\d+)\.(\d+)", 1) = "2" -
メジャーバージョンが 2 のファイル(例: "v2.16.48")
regexExtract(Name, "([^_]+)_([^_]+)\.txt", 2) like
"test*" - ファイル名の 2 番目の部分が "test" で始まるファイル
le:regexExtract(Line, "(\d+)", 0, 1) - 各行の 2
番目の数値を抽出します(offset=1)
(Extension = "log" and Size > 10MB) or (Date < today() -
7days) - 大きなログファイルまたは1週間以上前のファイル
AttrStr not contains "H" and Name like "*.tmp" -
非表示でない一時ファイル
isWithin(Extension, "a", "m") and inRange(Size, 0, 1MB) -
拡張子が「a」から「m」の範囲で、サイズが1MB未満のファイル
toLower(Name) = "readme.txt" - 大文字・小文字を区別しないファイル名の一致判定
toHalfWidth(Name) like "*.txt" - 全角を半角に変換した後で一致判定
trim(Name) = "readme.txt"- 先頭および末尾の空白を除去したファイル名に一致
trimLeft(Column("Value")) = "123" -
先頭の空白を除去した後の列の値を照合します(テーブルモード)
trimRight(Line) contains "end" - 行(末尾の空白を除いたもの)に "end"
が含まれているか確認します
EOL = 3- CRLF(Windows)形式の改行コードを含むファイル
EOLStr = "LF"- LF(Unix)改行コードを含むファイル
allof(EOL = 1)- 左(中央)右すべてのファイルでLF改行コードを使用
leftprop("System.Title") != none- 左側のファイルにはtitleプロパティが設定
prop("System.Author") = none-
左(中央)右何れかにauthorプロパティが設定されていない
if(LeftExists, LeftSize, 0) == 0 -
左側のファイルが存在しないか空ファイルかどうか
Different - 差異のあるファイル/フォルダーのみを表示します(表示フィルター専用)
Identical - 同一のファイル/フォルダーのみを表示します(表示フィルター専用)
allof(Binary) - すべての側でバイナリであるファイルのみを表示します(表示フィルター専用)
DifferentLeftMiddle and not DifferentMiddleRight -
3方向比較において、左と中央のみが異なるファイルを表示します(表示フィルター専用)
ファイルフィルターは、拡張子 fltのテキストファイルです。
これらは、フォルダー比較用の複数のフィルタールールを適用することを可能にします。
ファイルマスクと異なり、ファイルフィルターは、含むか除外、どちらかにマッチすることができます。
WinMergeは、たくさんの定義済ファイルフィルターをインストールします。
もし、必要なフィルターが、これらのファイルフィルターで提供されていなかったら、 自分自身で作成することができます。
タスクをもっと簡単にするために、WinMergeは、
FileFilter.tmplという名前のテンプレートも提供しています。
このセクションは、比較にファイルフィルターを適用する方法と、ファイルフィルターの文法を説明します。 「フィルターダイアログの使用」では、フィルターの追加、編集、管理方法について説明します。
WinMergeは、次の場所のファイルフィルターを自動的に検出します:
ここには、定義済ファイルフィルターがインストールされています。例えば、 C:\Program
Files\WinMerge\Filters。 システム上のすべてのユーザーに有効にするために、
ここにファイルフィルターを作成、または、コピーすることができます。
新しいファイルフィルターを作る前に、定義済フィルターに必要なものが含まれているか確認してください。 含まれていない場合、定義済ファイルの中から役立つルールが見つかるかもしれません。
このフォルダーの場所は、WinMerge オプションの、システムページで定義されています。
デフォルトでは、あなたのユーザープロファイルフォルダーのサブフォルダーとして指定されています (Windows
10なら、Documents\WinMerge\Filters)。
通常、ここに作成、または、コピーされたフィルターは、 あなただけが見ることができます。
新しいファイルフィルターを作成したら、それらをプライベートにするために、 ここにコピーすることができます。
その他のフォルダーにあるファイルフィルターを適用する前に、 それらをインストールしなければなりません。
次のいくつかの方法で、ファイルフィルターを適用することができます:
ファイルまたはフォルダーの選択ダイアログから、フォルダー比較を起動した時:
1(左)と 2(右)のフォルダー選択後、 フィルターフィールドの隣にある ボタンをクリックしてください。
フィルターダイアログで、ファイルフィルターを選択し、 フィルターフィールドへロードするには、ファイルフィルタータブを使用します。
ファイルフィルターが有効になっている(訳注: 何れかのファイルフィルターが選択されている状態)場合、選択されたファイルフィルターは、 フィルターフィールドへ既にロードされています。
比較操作を続けてください。操作を開始した時、 フィルターフィールドのファイルが適用されます。
フォルダー比較操作起動後(違うフィルターを適用した、 または、フィルターを無効にしてしまった時など)にファイルフィルターを変更するには:
→ をクリックしてください。
フィルターダイアログで、新しいフィルターを設定し、 をクリックしてください。
フィルターダイアログを閉じた時、新しいフィルターは自動では適用されません: フォルダー比較ウィンドウ中で新しい結果を見るには、 F5を押下してください。
WinMerge コマンドラインから、
フォルダー比較起動時にファイルフィルターを指定するには、 -fフラグを使用してください。
このセクションは、WinMerge ファイルフィルターの文法と、記述のためのガイドラインの提供について説明します。
コメント記号は、 ##です。 コメント記号の後にある、行内のすべての文字は無視されます。
WinMergeは、ルール中のほとんどの空白文字を無視します。
しかしながら、通常は、コメントの前に1つか複数の空白文字(スペースかタブ)が置かれるでしょう。 ルール中で、
##を文字列として使用するには、後ろの空白文字を取り除いてください。
ファイルフィルターで、まずはじめに必要な2行は:
ファイルダイアログに表示されるフィルター名です
適用されるフィルタータイプです。次の値のうち、1つを指定してください:
指定されたルールにマッチしたアイテム以外はすべて含めます。
指定されたルールにマッチしたアイテム以外はすべて除外します。
excludeメソッドを選択した時は、サブフォルダーを指定するd(ディレクトリ)ルールも追加しなければなりません。このように、すべてのサブフォルダーを指定するのは、通常良いアイデアです:
d: \\*$ ## Subfolders
これらの用語で混乱しないでください。ファイルフィルターのincludeルールは、「何を含めるか」を指定するわけではありません。「何を含めない」かを指定します。同様に、excludeルールは、「何を除外する」かを指定するわけではありません。「何を除外しないか」を指定します。
次に、ファイルには 1 つ以上のフィルター ルールが含まれている必要があります。ルールは好きなだけ追加できます。 1 行に 1 つのルールが必要であり、各ルールは完全に 1 行に収まる必要があります (ルール内で改行は許可されません)。 ルールは型指定子で始まり、その後に正規表現またはフィルター式が続きます。 サポートされている型指定子は次のとおりです。
正規表現正規表現を使用してファイル名を照合する
正規表現正規表現に一致するファイルを除外する (2.16.19 以降で利用可能)
正規表現正規表現を使用してフォルダー名を一致させる
正規表現正規表現に一致するフォルダーを除外する (2.16.19 以降で利用可能)
式ファイルに対するフィルター式(例: fe:Size < 1KB)(2.16.49 以降で使用可能)
式ファイルを除外するためのフィルター式(2.16.49 以降で使用可能)
式フォルダーに対するフィルター式(2.16.49 以降で使用可能)
式フォルダーを除外するためのフィルター式(2.16.49 以降で使用可能)
式ファイルとフォルダー両方に適用されるフィルター式(例: e:Name like "Common*.*")(2.16.56 以降で使用可能)
exprファイルとフォルダー両方を除外するためのフィルター式(2.16.56 以降で使用可能)
多くの正規表現の特殊文字の中で、次の文字は、ファイルフィルターでは特に重要です:
ルールが正しく動作するために頻繁に必要になります。
ルールが正しく動作するために頻繁に必要になります。例えば:
\.c$ ## 拡張子
cのファイルのみにマッチします。
\.c ## cppや
comのような、拡張子が
cで始まるファイルにマッチします。
通常の文字を、特殊文字にマッチさせるために使います。 例えば、フォルダー名にマッチするために、 フォルダー区切り文字のバックスラッシュの前に、
バックスラッシュを置きます(\\)。 ファイル名中のドットにマッチするために、
バックスラッシュを指定し、その後にドットを置きます(\.)。
特殊文字やワイルドカードは、ファイル名とマッチさせるためには、使用されません。 ある型のすべてのファイル名にマッチするためには、単にファイル名を省略します。
ルールは、大文字・小文字を区別しません。例えば、 f: \.bat$は、
winmerge.batと compare.BATにマッチします。
例9 ファイルフィルタールールの例
シンプルなファイルフィルタールール:
f: \.cpp$ ##*.cppファイルにマッチ f: \.h$ ##*.hファイルにマッチ f: ^My ##My*.*ファイルにマッチ f: Dlg\. ##*Dlg.*ファイルにマッチ d: \\test$ ##testフォルダーにマッチ d: ^\\Build$ ##Buildフォルダーマッチ d: Temp$ ##*Tempフォルダーにマッチ (例:FirstTemp) d: Src ##*Src*フォルダーにマッチ
いくつかのルールは、もっと複雑な正規表現です:
f: ^\.#.*$ ##.#filename.versionファイル f: Dlg\.c(pp)?$ ##*Dlg.cと*Dlg.cppファイル f: ^I.*\.h$ ##I*.hファイル f: Srv[1-9]\.def$ ##*Srv1.defから*Srv9.defファイル f: ^[h,k,m] ##h*.*d、k*.*、m*.*ファイル
ファイル比較で単一行を無視するために、行フィルターを使用することができます。 例えば、コメント、生成されたコードの決まった型や、 バージョン管理システムのタイムスタンプの様なものを無視するために、 行フィルターを使うかもしれません。各行フィルターは1つのルールです。 ファイル比較のために、たくさんの行フィルターを使用することができます。
フィルターの追加、編集、管理については、 「フィルターダイアログの使用」を参照してください。
次の方法で、行フィルターを適用することができます:
ファイルまたはフォルダーの選択ダイアログから、 ファイル比較を起動する場合
1(左)と 2(右)のファイル選択後、 フィルターフィールドの隣の をクリックしてください。
フィルターダイアログで、使用したい行フィルターを有効化するため、 また、現在どの行フィルターが有効かを確認するには、行フィルタータブを使います。
フィルターフィールドは、 どの行フィルターが有効化されているかを表示しません。
ファイル比較操作を続けてください。 操作を開始した時に、有効化された行フィルターが適用されます。
既に、ファイル比較操作を起動後 (違うフィルターを適用した、または、フィルターを無効にしてしまった時など)は、
→ をクリックしてください。
ファイルフィルタータブを開いてください。
あなたが適用したい行フィルターの行にチェックしてください。 また、適用したくないフィルターは、チェックを外してください。
、 、 ボタンを使用して、 フィルターを追加、編集、削除することもできます。
行フィルター機能を有効にするには、 行フィルターを有効にするにチェックしてください。 行フィルター機能を無効にするには、チェックを外してください。
をクリックして、 ファイルフィルターダイアログを閉じてください。
F5を押下して変更を適用し、 ファイル比較ウィンドウをリフレッシュしてください。
行フィルターは、行フィルタールールが有効化されている場合、 比較ファイル中の単一行の差異毎に評価されるルールです。 単一行の差異にルールがマッチした時、その差異は無視されます。
無視された差異は、ファイル比較ウィンドウ中では、 無視された差異の色(WinMergeオプションの色ページで定義されている) でマークされます。 これは、その他のタイプと無視された差異を区別できるようにします。 しかし、無視された差異は、選択やマージすることができません。
行フィルターマッチは、2つの考えに基づいて記述されるかもしれません:
ルールが、行のある部分にマッチした時、差異全体が無視されます。 つまり、行の一部だけをフィルターすることはできません。 例えば、2つのファイルに、次の単一行の差異があると仮定した場合:
File1:
# Jean Sibelius
File2:
# Janne Sibelius
フィルターなしの場合、行は差異として検出されます。 しかし、行フィルターを
^#の式とともに適用する場合、その行は同一であると評価されます。
なぜなら、式は、両方のファイルにマッチする最初の文字のみを指定しているからです。
ルールは、すべての行にマッチした場合に、複数行差異に適用されます。例えば、次の2行の差異を考えてみてください:
File1:
# Jean Sibelius # Pekka Himanen
File2:
# Janne Sibelius Pekka Himanen
同じ ^#ルールは、1行目にマッチしますが、2行目にはマッチしません。 したがって、差異は無視されません。
パターンの正確さを制御するために、 行頭(^)と行末($)
記号を使用することは、大抵、良い習慣です。 なぜなら、式が、行のある部分にマッチした場合に、 ルールが適用されるからです。
例10 行フィルターサンプル
^MYTAG$
厳密に、 MYTAGにマッチする行をフィルターします
^::
::で始まる行をフィルターします
^/\*.*\*/$
で始まり、/**/で終わる行をフィルターします
^[1-5]00
数字の、100、200、300、400、500 で始まる行をフィルターします
例11 CVS の Id 行にマッチする行フィルタールール
CVS の Id 行は、次の様なものです:
// $Id: Filters.xml 7591 2013-01-20 15:47:42Z christianlist $
そしてこれは、次のルールでフィルターできます:
^// \WId: .*\$
表示行フィルターは、ファイル比較ウィンドウに表示される行を制御します。フィルターにマッチしない行は非表示になりますが、比較結果自体には影響しません。
次のいずれかの方法で表示フィルターバーを開いてください:
→ をクリックするか、Ctrl+Shift+L を押します。
ファイル比較ウィンドウで選択テキストを右クリックし、 → を選択します。WinMerge
は選択テキストから自動的に Line contains "..." 式を生成し、フィルターバーを開きます。
フィルターを解除するには、入力フィールドをクリアして Enter を押します。フィルターを有効にしたままフィルターバーを非表示にするには、閉じるボタンをクリックします。
表示フィルターバーは、入力が le: プレフィックスで始まるかどうかによって決まる 2
つの形式の入力を受け付けます:
le: プレフィックスのない入力はリテラル文字列として扱われます。WinMerge
はその文字列を含む行のみを表示します。内部的には、入力は le:Line contains
" と等価です。input"
例: TODO と入力すると、テキスト TODO
を含むすべての行が表示されます。
le: プレフィックス(フィルタ式)入力が le: で始まる場合、残りの部分はフィルタ式として解釈されます。「フィルタ式の構文」 で説明されているすべての式の構文が使用できます。
例: le:Different and Line contains "ERROR"
le:
プレフィックスは入力の先頭に記述する必要があります。それ以外の位置にある場合、入力全体がプレーン文字列として扱われます。
例えば、Hello or le:Line contains "Hello"
はフィルター式を含みません。入力全体が、文字列 Hello or le:Line
contains "Hello" を検索するためのリテラル文字列として扱われます。
表示行フィルタ式はフォルダー比較フィルタ式と同じエンジンを使用します (「フィルタ式の構文」 を参照)。個々の行に作用する以下の追加属性および関数が利用できます。
サイド固有のプレフィックスをサポートする属性は、Left、Middle、Right
のプレフィックスを受け付けます (例:
LeftLine、RightLineLength)。プレフィックスのない属性はすべてのペインにわたって評価されます。
Line現在の行のテキスト内容。サイド固有のプレフィックスをサポートします。例: Line contains "TODO"
LineLength現在の行の文字数。サイド固有のプレフィックスをサポートします。例: LineLength > 120
LineNumberファイル内の実際の行番号 (1 基底)。ゴースト行は含みません。サイド固有のプレフィックスをサポートします。例: LineNumber
<= 50
ViewLineNumberゴースト行を含む表示上の行番号 (1 基底)。グローバル属性(サイドプレフィックスなし)。例: ViewLineNumber
<= 100
Different行が差異ブロックの一部である場合に true。グローバル属性。例: Different
Identicalすべてのペインで行が同一である場合に true。グローバル属性。
Trivial行が空白またはその他の無視されるコンテンツのみで異なる場合に true。グローバル属性。例: Different or
Trivial
Existsペインに行が存在する場合(ゴースト行でない場合)に true。サイド固有のプレフィックスをサポートします。例: LeftExists
and not RightExists
Missingペインの行がゴースト行である場合に true。Exists の逆です。サイド固有のプレフィックスをサポートします。
Moved行が移動された行として検出された場合に true。サイド固有のプレフィックスをサポートします。
Bookmarked行にブックマークがある場合に true。サイド固有のプレフィックスをサポートします。
DifferentLeftMiddle,
DifferentMiddleRight,
DifferentLeftRight指定されたペアのペインがこの行で異なる場合に true。3方向比較のみ(ただし
DifferentLeftRight は 2方向比較でも動作します)。グローバル属性。例:
DifferentLeftMiddle and not DifferentMiddleRight
EOL現在の行の行末スタイルを整数値で表します。サイド固有のプレフィックスをサポートします。値: 0 = なし、1 = LF、2 = CR、3 = CRLF
例: le:EOL = 3 は CRLF 行末の行のみを表示します
EOLStr現在の行の行末スタイルを文字列で表します。サイド固有のプレフィックスをサポートします。値: "None"、"LF"、"CR"、"CRLF" 例:
le:EOLStr = "LF" は LF 行末の行のみを表示します
Column, ColumnCount (テーブルモードのみ)CSV/テーブルモードでのセル内容と列数。サイド固有のプレフィックスをサポートします。例: Column("Status") =
"FAIL"
LineAt(lineNumber),
LineOffsetAt(offset)絶対行番号または現在行からの相対オフセット位置にある行のテキスト。サイド固有のプレフィックス関数をサポートします。例:
le:Different and RightLineOffsetAt(-1) matches "^//"
Column(indexOrName),
ColumnAt(line,
indexOrName),
ColumnOffsetAt(offset,
indexOrName) (テーブルモードのみ)現在行、絶対行、または相対行のインデックスまたは名前によるセル内容。例: le:RightColumn("Category") !=
ColumnOffsetAt(-1, "Category")
表示行フィルタ式は 「関数」 で説明されている関数も使用できます。
matchContext(expr,
linesBefore,
linesAfter)expr にマッチする行の前後
linesBefore 行以内または
linesAfter 行以内に現在の行がある場合に true。例:
le:matchContext(Different, 3, 3)
matchNumber(expr)マッチするすべての行の中での現在行の 1 基底インデックス。行がマッチしない場合は undefined を返します。例:
le:matchNumber(Different) = 1 はマッチする最初の行(最初の差異行)のみを表示します。
matchCount(expr)ファイル全体で expr にマッチする行の合計数。例:
le:matchNumber(Different) = matchCount(Different)
はマッチする最後の行(最後の差異行)のみを表示します。
matchBlockNumber(expr)現在行を含むマッチングブロックの 1 基底ブロック番号を返します。現在行がいずれのマッチングブロックにも含まれない場合は
none を返します。例: le:matchBlockNumber(Different) =
1 は最初の差異ブロック内の行のみを表示します。
matchBlockOffset(expr)マッチングブロック内での現在行の 1 基底オフセットを返します。現在行がいずれのマッチングブロックにも含まれない場合は
undefined を返します。例:
le:matchBlockOffset(Different) = 1 は各差異ブロックの最初の行のみを表示します。
matchBlockSize(expr)現在行を含むマッチングブロックのサイズ(行数)を返します。現在行がいずれのマッチングブロックにも含まれない場合は
undefined を返します。例: le:matchBlockSize(Different)
> 5 は 5 行より大きい差異ブロック内の行のみを表示します。
matchBlockCount(expr)ファイル内のマッチングブロックの合計数。例: le:matchBlockNumber(Different) =
matchBlockCount(Different) は最後の差異ブロック内の行のみを表示します。
matchDistance(expr),
matchDistanceBefore(expr),
matchDistanceAfter(expr)最も近いマッチング範囲までの行距離(両方向、前方のみ、または後方のみ)。例: le:matchDistance(Different)
<= 5
matchInside(beginExpr,
endExpr)現在行が beginExpr にマッチする行と次の
endExpr にマッチする行の間にある場合(両端含む)に true。例:
le:matchInside(Line matches "^#ifdef", Line matches
"^#endif")
average(expr),
average(expr,
condition)ファイル内のすべての行に対して expr
を評価して得られる数値の平均(算術平均)を計算します。condition
が指定された場合、condition が true
と評価される行のみが計算に含まれます。数値でない結果は無視されます。数値が見つからない場合は undefined を返します。例:
le:toInt(Column("Price")) >
average(toInt(Column("Price"))) は価格が平均価格を超える行を表示します。条件付きの例:
le:average(toInt(Column("Score")), Column("Status") =
"PASS") はステータスが "PASS" の行の平均スコアを計算します。
maximum(expr),
maximum(expr,
condition)ファイル内のすべての行に対して expr
を評価して得られるすべての結果の中の最大値を返します。condition
が指定された場合、condition が true
と評価される行のみが考慮されます。数値、文字列(アルファベット順比較)、タイムスタンプで動作します。値が見つからない場合は undefined
を返します。例: le:toInt(Column("Quantity")) =
maximum(toInt(Column("Quantity"))) は最大数量の行を表示します。
minimum(expr),
minimum(expr,
condition)ファイル内のすべての行に対して expr
を評価して得られるすべての結果の中の最小値を返します。condition
が指定された場合、condition が true
と評価される行のみが考慮されます。数値、文字列(アルファベット順比較)、タイムスタンプで動作します。値が見つからない場合は none を返します。例:
le:Column("Status") = minimum(Column("Status"))
はアルファベット順で最初のステータス値の行を表示します。
sum(expr),
sum(expr,
condition)ファイル内のすべての行に対して expr
を評価して得られるすべての数値の合計を計算します。condition
が指定された場合、condition が true
と評価される行のみが計算に含まれます。数値でない結果は無視されます。数値が見つからない場合は undefined を返します。例:
le:toInt(Column("Quantity")) / sum(toInt(Column("Quantity"))) *
100 は各行の合計数量に対するパーセンテージを計算します。条件付きの例:
le:sum(toInt(Column("Sales")), Column("Region") = "East")
は "East" リージョンの総売上を計算します。
| 入力 | 効果 |
|---|---|
TODO |
テキスト "TODO" を含む行を表示します(プレーン文字列) |
le:Different |
差異ブロック内の行のみを表示します |
le:Different or Trivial |
空白のみの変更を除く差異を表示します |
le:matchContext(Different, 3, 3) |
各サイドに 3 行のコンテキストを付けて差異ブロックを表示します |
le:matchNumber(Different) = 1 |
最初の差異行のみを表示します |
le:matchBlockNumber(Different) <= 3 |
最初の 3 つの差異ブロック内の行のみを表示します |
le:matchBlockOffset(Different) = 1 |
各差異ブロックの最初の行のみを表示します |
le:matchBlockSize(Different) > 10 |
10 行より大きい差異ブロック内の行のみを表示します |
le:Different and Line contains "ERROR" |
差異があり、かつ "ERROR" を含む行を表示します |
le:strFind(Line, "TODO") < 10 |
"TODO" が先頭 10 文字以内に出現する行を表示します |
le:regexFind(Line, "\d{4}") != none |
4桁の数字を含む行を表示します |
le:matchContext(Bookmarked, 2, 2) |
2 行のコンテキストを付けてブックマーク行を表示します |
le:LineNumber <= 50 |
最初の 50 行のみを表示します |
le:EOL = 3 |
CRLF (Windows) 行末の行のみを表示します |
le:EOLStr = "LF" |
LF (Unix) 行末の行のみを表示します |
le:allof(EOL = 1) |
すべてのペインが LF 行末を使用している行を表示します |
le:toInt(Column("Count")) > 100 |
"Count" 列の値が 100 を超える行を表示します(テーブルモード) |
フォルダー比較ウィンドウの表示ファイル/フォルダーフィルターは、ファイル比較ウィンドウの表示行フィルターと同じように機能しますが、行ではなくファイルやフォルダーに対して動作します。比較結果に影響を与えることなく、表示するアイテムを制御します。
表示フィルターバーを開くには、 → をクリックするか、Ctrl+Shift+L を押します。
フィルターバーは、ファイルまたはフォルダーの選択ダイアログの フィルター フィールドと同じ構文を受け付けます。詳細は 「ファイルマスクの文法と例」 および 「フィルタ式の構文」 を参照してください。
フィルターを解除するには、入力フィールドをクリアして Enter を押します。フィルターを有効にしたままフィルターバーを非表示にするには、閉じるボタンをクリックします。
例:
*.cpp;*.h - C++ ソースおよびヘッダーファイルを表示します
!.git\;!.vs\ - .git および .vs フォルダーを除外します
fe:Different - 異なるファイルのみを表示します
de:Items > 10 - 10 個以上のアイテムを含むフォルダーを表示します
表示行フィルターはこのダイアログからは設定できません。 → から開いてください。「表示行フィルターの使用」 を参照してください。
このセクションは、ファイルフィルターと行フィルターの作成・管理機能を提供する、 フィルターダイアログの説明をします。
フィルターダイアログを開くには、次の何れかの方法を使用してください:
ファイルまたはフォルダーの選択ダイアログで、 フィールドの右にある、 選択ボタンをクリックしてください。 フォルダー比較用のファイルフィルターを適用したい時は、方法を使用してください。
→ をクリックしてください。 この方法は、ファイルまたはフォルダーの選択ダイアログを開いている時以外に使用可能です。
フィルターダイアログには、それぞれの WinMergeフィルター用のタブがあります:
フォルダー比較用のファイルフィルターを設定するには、このタブを選択してください。
ファイル比較用の行フィルターを設定するには、こちらのタブを使用してください。
ファイル比較操作の置換フィルターを使用するには、このタブを選択します。
表示行フィルターはこのダイアログからは設定できません。 → から開いてください。「表示行フィルターの使用」 を参照してください。
このタブの主要部分は、フォルダー比較用に利用可能なファイルフィルターの一覧です。 このリストは、共有、個人、そして、 「ファイルフィルターの場所」で説明されている、 WinMergeが知り得るインストール済みのファイルフィルターを含んでいます。
ファイルフィルターが、フォルダー比較操作で、それを有効にすること、 また、フィルターが使用され始めてから、 現在のフィルターを止めるために無効にすることを可能にしなければなりません:
まだ、フィルターダイアログを開いていない場合は、開いてください
ファイルフィルターを選択、もしくは、リストから を選択しくてださい。
をクリックして、 フィルターダイアログを閉じてください。
ファイルフィルターを有効にした後でそれらを適用する方法が、いくつかあります。 詳細は、 「ファイルフィルターの適用」を参照してください。
ファイルフィルターリストの管理と フィルターの新規作成には、これらのボタンを使用してください:
フィルターがどのように動作するか素早く確認するには、 リスト中のファイルフィルターを選択し、 をクリックしてください。 詳細は、 「ファイルフィルターのテスト」を参照してください。
ファイルフィルターを配置し、フィルターリストへ追加することができます。 ファイルフィルターは、それらをインストールしない限り、 共有フォルダー、デフォルトのプライベートフォルダーのどちらでも検出されません。
共有フォルダーかプライベートフィルターフォルダーのどちらかに、 ファイルテンプレートの新しいコピーを作成します。 「ファイルフィルターの作成」で説明されているように、 テンプレートを編集、ルールの追加を行ってください。
デフォルトエディターでファイルを開くには、リスト中のファイルフィルターを選択し、 をクリックしてください。
ファイルを削除しリストから取り除くには、 リスト中のファイルフィルターを選択し、 をクリックしてください。 これで、本当にファイルは削除されました。
をクリックして、 フィルターダイアログを閉じた時、変更は保存されます。 行フィルターは、Windowsのレジストリに保存されます。
WinMergeにインストール済のファイルフィルターが、 お望みのフィルターを提供していないなら、あなた自身で作成することができます:
→ をクリックしてください。 または、ファイルまたはフォルダーの選択ダイアログから、 フィールドの右にある、 選択ボタンをクリックしてください。
共有/プライベートフィルターダイアログで、 共有フィルター、または、 プライベートフィルター (これらを何に使用するかは、 「ファイルフィルターの場所」を参照してください)を選択し、 OKをクリックしてください。
お使いのシステムの共有、または、プライベートフォルダーが、 「新しいフィルターのファイル名を指定してください」ダイアログに開きます (プライベートフォルダーが存在しない場合は、WinMergeが作成します)。
「新しいフィルターのファイル名を指定してください」ダイアログで、 ファイル名を入力し をクリックしてください。
既存のファイル名を選ばないでください: 既存のファイルを編集するには、 2に戻って、 「新規」の代わりに、「編集」をクリックしてください。
WinMergeは、新しいファイルを、テンプレート: FileFilter.tmplを用いて作成し、
デフォルトのテキストエディターでそれを開きます。
テンプレートの編集は、テンプレートの指示に従って、 プレースホルダー名と説明の更新、 「ファイルフィルターの文法」で説明されている、 フィルタールールの追加を行ってください。 テキストエディターでファイルを保存してください。
あなたが作成中のルールを、素早くテストしたい場合は、 フィルターダイアログの「テスト」ボタンをクリックしてみてください。 詳細は、「ファイルフィルターのテスト」を参照してください。
標準のフィルターフォルダーに、ファイルフィルターを作成したにも関わらず、フィルターダイアログがその新しいファイルフィルターを表示しない場合は、一度、をクリックしてダイアログを閉じてください。次に、 → をクリックし、再度ダイアログを開いてください。ファイルフィルターリストは、新しいファイルフィルターを含んでいるでしょう。
お使いのシステム上の、別の場所にファイルを保存した場合、 あなたがインストールしない限り、WinMergeは、それを検出することができません。 システム上のどこかにあるファイルフィルターを検出させるには:
フィルターダイアログの をクリックしてください。
「インストールするファイルフィルターの位置」ダイアログで、システム上の fltファイルを選択し、
をクリックしてください。
ファイルフィルターリストは、インストールされたファイルフィルターを含んでいるでしょう。
新しいルール作成や既存のルールの理解を補助するため、 サンプルデータに対し素早くファイルフィルターをテストするには、 テストフィルターダイアログを使用してください。 それは、フルで比較操作を走らせるより簡単です。
フィルターダイアログから始めます:
ファイルフィルタータブで、テストしたいファイルフィルターを選択してください。
テストするルールを確認したい場合は、 をクリックしてください。 ファイルが開き、次のステップの間、内容を確認することができます。
をクリックしてください。
フィルターのテストダイアログで、テストするルールの型を選択してください:
ファイルフィルター中のファイルルール、 f:をテストするには、 フォルダー名オプションのチェックを外してください。
フォルダールール、 d:をテストするには、 フォルダー名オプションにチェックを入れてください。
テスト用のテキストを入力してください。
テキストは、テストするルールの型に適したものであるべきです。 例えば、フォルダー名オプションをチェックした場合、 あなたは「\temp」の様なフォルダー名を入力したいでしょう。
結果欄は、入力したテキストを、 次のどちらかのステータスと共に表示します:
passed、または、
failed。
ファイル比較用の行フィルターの設定と有効化には、このタブを使用してください。 タブは、ルールの一覧を持っています。それぞれのルールは、1つの正規表現を含みます。 ファイル比較用に、リストから複数のルールを組み合わせて適用することができます。
下の 正規表現リストには、 いつでもルールの追加、編集、削除に使うことのできる、編集欄とボタンがあります。
新しいルールを追加するには:
ボタンをクリックしてください。 カーソルが自動的に編集欄へ移動します。
正規表現リストの下にある、編集欄に式を入力してください。
をクリックし、リストへ式を読み込んでください。
既存のルールを編集するには:
行を選択し、 をクリックしてください。
編集欄の式を編集してください。
編集が完了したら、をクリックしてください。
ルールを削除するには、ルールを選択(チェック)し、 ボタンをクリックしてください。
正規表現リストで、 適用したいフィルターにチェックを入れ、適用したくないフィルターはチェックを外すだけです。
行フィルターを有効にするオプションに チェックを入れるか、外してください。 行フィルターを有効にした場合、 正規表現リストで、現在チェックされているすべてのルールが使用されます。 行フィルターを無効にした場合、たとえそれらがチェックされていても、ルールは使用されません。
をクリックして、フィルターダイアログを閉じ、設定を保存してください。
それらを有効にした後にファイルフィルターを適用する、いくつかの方法があります。 詳細は、 「行フィルターの適用」を参照してください。
正規表現は、非常に複雑になり得ます。幸い、WinMerge のほとんどのファイルフィルターは、このトピックの例からもわかるように、シンプルな範囲の表現です。 WinMergeと共にインストールされるフィルターファイルは、多くの役に立つ例を含んでいます。
最後に、Web上には、正規表現を手助けする、これらのサイトを含むたくさんの情報源があります: