Lorsque vous comparez des fichiers ou des dossiers, vous pouvez utiliser des filtres pour restreindre la portée de la comparaison. Cela peut être utile lorsque vous souhaitez simplifier le résultat de la comparaison en éliminant les différences qui ne vous intéressent pas. Les filtres sont des règles basées sur des expressions régulières. WinMerge utilise le moteur d'expressions régulières populaire PCRE (Perl Compatible Regular Expressions).
Le fonctionnement de base du filtrage est simple : chaque élément qui serait normalement comparé (dossier, fichier ou ligne d'un fichier) est évalué, et si l'expression du filtre correspond à l'élément cible, le filtre est appliqué. Selon le type de filtre, l'élément est soit inclus, soit exclu de la comparaison.
Il existe différents filtres WinMerge pour les opérations de comparaison de dossiers et de fichiers :
Vous pouvez spécifier les fichiers à inclure dans une comparaison de dossiers en utilisant des masques de fichiers simples ou, pour un filtrage plus complexe, en appliquant plusieurs règles spécifiées dans un filtre de fichier.
Les fichiers et dossiers filtrés sont masqués par défaut dans le résultat, ce qui est généralement l'effet recherché. Vous pouvez cliquer sur → pour les faire réapparaître, mais la fenêtre de comparaison n'affiche que des informations minimales à leur sujet. Par exemple, vous ne pouvez pas savoir si un fichier ignoré est un fichier texte ou un fichier binaire.
Les filtres de lignes s'appliquent uniquement aux opérations de comparaison de fichiers. Ils vous permettent d'ignorer les différences portant sur une seule ligne.
Les filtres de substitution s'appliquent uniquement aux opérations de comparaison de fichiers. Ils remplacent les chaînes de caractères dans le bloc de diff par des chaînes spécifiées, les comparent, et ignorent le bloc de diff si les résultats du remplacement correspondent. Ils sont utiles pour ignorer un grand nombre de changements sans intérêt.
Vous pouvez utiliser un ou plusieurs masques de fichiers spécifiant les extensions de fichiers à inclure dans une comparaison de dossiers. Tous les autres fichiers seront omis de votre sélection.
Définissez et appliquez un masque de fichier au moment où vous lancez votre opération de comparaison de dossiers :
Si vous utilisez la boîte de dialogue « Sélectionner des fichiers ou des dossiers », après avoir choisi les dossiers 1er et 2e, saisissez un ou plusieurs masques de fichiers dans le champ Filtre. Les masques sont appliqués lorsque vous démarrez l'opération de comparaison.
Si vous utilisez la ligne de commande WinMerge, utilisez le commutateur
-f pour spécifier les masques de fichiers (voir l'exemple
dans la section suivante).
Vous pouvez spécifier des masques de fichiers et des filtres étendus en utilisant ce format :
Filtre1 du Groupe1;Filtre2 ...|Filtre1 du Groupe2;Filtre2 ...|...
Le caractère | sépare les groupes de filtres et agit
comme un ET logique.
Les filtres au sein d'un même groupe sont séparés par ;
et sont interprétés avec un OU logique.
Un fichier est inclus seulement s'il correspond à au moins un filtre dans chaque groupe.
Pour inclure un caractère | (barre verticale) littéral
dans une expression régulière qui n'est pas entourée de guillemets doubles
(comme dans les filtres f: ou
f!:), utilisez || à la place.
Exemple : f:(abc||def)\.txt$
Chaque filtre (par ex., Filtre1, Filtre2) peut être de l'un des types suivants :
*.extMasque de fichier par extension (ex: *.txt)
*.Fichiers sans extension (ex: README)
*.extExclure les fichiers correspondant à l'extension (disponible depuis 2.16.19)
dossier\Dossiers cibles (doit se terminer par \) (disponible depuis 2.16.19)
dossier\Exclure les dossiers correspondants (disponible depuis 2.16.19)
regexpFait correspondre les noms de fichiers par expressions régulières (disponible depuis 2.16.49)
regexpExclure les fichiers correspondant à la regex (disponible depuis 2.16.49)
regexpFait correspondre les noms de dossiers par regex (disponible depuis 2.16.49)
regexpExclure les dossiers correspondant à la regex (disponible depuis 2.16.49)
exprExpression de filtre pour les fichiers (ex: fe:Size < 1KB) (disponible depuis 2.16.49)
exprExpression de filtre pour exclure des fichiers (disponible depuis 2.16.49)
exprExpression de filtre pour les dossiers (disponible depuis 2.16.49)
exprExpression de filtre pour exclure des dossiers (disponible depuis 2.16.49)
nom du filtre de fichierAppliquer un filtre de fichier par son nom (disponible depuis 2.16.49)
Example 1. Masque de fichier
Dans cet exemple en ligne de commande, l'opération de comparaison de
dossiers inclut uniquement les fichiers avec les extensions
xml ou txt. Tous les autres
fichiers sont omis :
WinMergeU c:\project\docs c:\temp /f *.xml;*.txt
Example 2. Exclure des dossiers (depuis la version 2.16.19)
Dans cet exemple en ligne de commande, l'opération de comparaison de
dossiers exclut les dossiers .git et
.vs :
WinMergeU c:\project\docs c:\temp /f !.git\;!.vs\
Example 3. Expression de filtre (depuis la version 2.16.49)
Dans cet exemple en ligne de commande, l'opération de comparaison de
dossiers inclut uniquement les fichiers ayant les extensions
cpp ou h et dont la taille est
inférieure à 1 Ko :
WinMergeU c:\project\docs c:\temp /f "*.cpp;*.h|fe:Size <
1KB"
WinMerge permet un filtrage puissant à l'aide d'expressions opérant sur les métadonnées des fichiers, leur contenu et le contexte de comparaison. Cette section décrit les attributs, opérateurs, fonctions, types de données et règles d'évaluation pris en charge.
Les types de littéraux pris en charge incluent :
Booléen : true,
false
Entier : entiers signés 64 bits (ex :
1024, ou avec des unités comme 100KB,
7days)
Réel (Double) : nombres à virgule flottante avec
décimale ou exposant facultatifs (ex : 3.14,
.5, 1e6)
Chaîne : entourée de guillemets doubles (ex :
"exemple")
En interne, les valeurs peuvent être des types suivants : Booléen, Entier,
Réel, Horodatage, Chaîne, Contenu de fichier, Tableau (Array), ou
undefined.
Les expressions de filtre prennent en charge divers attributs se rapportant aux métadonnées et au contenu des fichiers. Les noms d'attributs sont insensibles à la casse. Vous pouvez éventuellement spécifier à quel côté de la comparaison (gauche, droite ou milieu) un attribut s'applique en utilisant un préfixe.
Retourne true si le fichier existe,
false sinon
Nom du fichier
Retourne le nom du fichier sans l'extension. Par exemple, « document.txt » retourne « document ».
Extension du fichier
Retourne true si l'élément est un dossier/répertoire, false si c'est un fichier.
Retourne le chemin relatif en excluant le nom de fichier et le dossier de base
Returns the relative path from the comparison root directory, including both folder path and filename. For example, if comparing "C:\Project" and the file is at "C:\Project\src\main.cpp", RelPath returns "src\main.cpp".
Retourne le chemin complet du fichier
Taille du fichier
Horodatage de dernière modification
Chaîne de date de dernière modification au format
yyyy-MM-dd
Horodatage de la date de création
Retourne les attributs de fichier sous forme d'entier
Retourne la chaîne des attributs de fichier. Exemples :
"R" pour Lecture seule, "H" pour
Caché, "A" pour Archive, "S" pour
fichier Système.
Les attributs suivants sont disponibles uniquement pour les éléments de comparaison de fichiers. Lorsqu'ils sont utilisés avec des dossiers, le comportement est indéfini.
Contenu du fichier. Retourne une valeur de type FileContent. Seuls
contains et recontains peuvent être
utilisés avec ce type.
Les attributs suivants sont disponibles uniquement pour les éléments de comparaison de dossiers. Lorsqu'ils sont utilisés avec des fichiers, le comportement est indéfini.
Nombre de fichiers directement contenus dans le dossier.
Nombre de fichiers contenus dans le dossier, incluant tous les sous-dossiers.
Nombre d'éléments (fichiers et sous-dossiers) directement contenus dans le dossier.
Nombre d'éléments (fichiers et sous-dossiers) contenus dans le dossier, incluant tous les sous-dossiers.
Taille totale de tous les fichiers directement contenus dans le dossier, en octets.
Taille totale de tous les fichiers contenus dans le dossier, incluant tous les sous-dossiers, en octets.
Des préfixes peuvent être ajoutés pour spécifier le côté de la comparaison :
Left : S'applique au fichier du côté gauche (par ex.,
LeftSize)
Right : S'applique au fichier du côté droit (par ex.,
RightDate)
Middle : S'applique au fichier du milieu dans une
comparaison à 3 voies (par ex., MiddleName)
Les attributs sans préfixe (par ex. Size) renvoient un
tableau de valeurs de tous les côtés disponibles (Gauche, Milieu, Droite).
Ces attributs permettent d'accéder aux valeurs du système de propriétés
Windows, telles que les métadonnées définies par le schéma du système de
propriétés Windows (par ex. System.Title,
System.FileOwner,
System.Image.HorizontalResolution).
Renvoie un tableau de valeurs de propriété (Gauche, Milieu, Droite) pour le
nom de propriété canonique spécifié. Exemple :
prop("System.Title")
Valeur de propriété du fichier du côté gauche. Exemple :
leftprop("System.FileOwner")
Valeur de propriété du fichier du milieu (dans une comparaison à 3 voies).
Valeur de propriété du fichier du côté droit.
Les attributs sans préfixe de côté (par ex. Size)
renvoient un tableau de valeurs de tous les côtés disponibles (Gauche,
Milieu, Droite). Lors de l'application d'un opérateur à de tels tableaux, le
comportement diffère selon que la comparaison se fait avec un scalaire ou un
autre tableau.
Lors de la comparaison d'un tableau à un scalaire, l'opération est appliquée
à chaque élément du tableau individuellement. Cela donne un tableau de
booléens. Si un élément de ce tableau est true,
l'expression globale est évaluée à true. Sinon, elle est
évaluée à false.
Lors de la comparaison de deux tableaux, le comportement dépend de l'opérateur :
Pour = et != : Les tableaux doivent
avoir la même longueur. Le résultat est une valeur booléenne unique, pas un
tableau. = renvoie true seulement si
tous les éléments sont égaux. != renvoie
true si au moins un élément diffère.
Pour tous les autres opérateurs (par ex. >,
<) : l'opération est appliquée élément par élément,
produisant un tableau de booléens. Le résultat final de l'expression est
true si n'importe quel élément du tableau booléen est
true, et false si tous les éléments
sont false.
Example 5. Exemples
[2, 4] = [2, 4] -> true
[2, 4] != [2, 5] -> true (car 4 != 5)
[3, 5, 8] > [6, 4, 2]
-> [false, true, true]
-> true (car au moins une comparaison est vraie)
Les comparaisons Tableau vs Scalaire produisent un tableau de booléens. Le
résultat global de l'expression est true si au moins un
élément est true.
La comparaison Tableau vs Tableau avec = ou
!= renvoie une valeur booléenne unique.
La comparaison Tableau vs Tableau avec d'autres opérateurs produit un
tableau de booléens. Le résultat final est true si
n'importe quel élément est true.
Tous les opérateurs de comparaison de chaînes (tels que
=, !=, like,
matches, contains et
recontains) sont actuellement insensibles à la casse.
<, <=, >,
>=Comparaison numérique, d'horodatage ou de chaîne
=Comparaison d'égalité
!=Comparaison d'inégalité
+, -, *,
/, %
Opérateurs arithmétiques. + et -
effectuent l'addition et la soustraction. * et
/ effectuent la multiplication et la
division. % est l'opérateur modulo (reste).
and, or, notOpérateurs logiques
likeCorrespondance de chaîne avec caractères génériques (wildcards)
Vous pouvez également utiliser not like pour effectuer la
correspondance inverse.
matchesCorrespondance par expressions régulières
Vous pouvez également utiliser not matches pour effectuer
la correspondance inverse.
containsVérifie si une chaîne contient une sous-chaîne
Vous pouvez également utiliser not contains pour vérifier
l'absence de la sous-chaîne.
recontainsVérifie si une sous-chaîne correspond à une expression régulière
Vous pouvez également utiliser not recontains pour
garantir qu'aucune correspondance n'existe.
content)Renvoie le nombre de lignes dans le contenu du fichier ou le tableau de
contenu de fichier sous forme d'un Integer. Si
content est un tableau, le résultat est un
tableau d'entiers. Exemple : lineCount(Content)
content,
start, count)
Extrait le nombre spécifié de lignes en commençant par l'index de ligne
donné dans le contenu du fichier ou le tableau de contenu de fichier, et les
renvoie sous la forme d'une seule chaîne concaténée. Si
content est un tableau, le résultat est un
tableau de chaînes.
source)Renvoie la longueur de la chaîne sous forme d'un
Integer. Si source est un
tableau de chaînes, le résultat est un tableau d'entiers. Exemple :
strlen(Name)
source, start,
count)Renvoie une plage de texte spécifique de la chaîne ou du tableau
de chaînes sous forme d'une String. Si
source est un tableau de chaînes, le résultat est
un tableau de chaînes. Exemple : substr(Name, 0, 3)
Remplace toutes les occurrences de la chaîne from
par to. Si str est un
tableau, le résultat est un tableau de chaînes avec les remplacements
appliqués. Exemple : replace(name, ".bak", ".txt")
Remplace toutes les correspondances du motif d'expression régulière par la
chaîne de remplacement. Prend en charge les références arrière ($1, $2,
etc.) dans la chaîne de remplacement. Si str est
un tableau, le résultat est un tableau de chaînes avec les remplacements
appliqués. Exemple : regexReplace(name, "^(\\w+)_(\\w+)$",
"$2_$1") permute des mots séparés par un souligné.
Replaces multiple strings in str using
replacement rules loaded from a tab-separated file. The file format is one
replacement rule per line:
search_string<TAB>replacement_string. Lines
starting with # are treated as comments and ignored.
Empty lines are also ignored. If str is an
array, the result is an array of strings with replacements applied.
File format example:
# Comment line apple orange cat dog old new
Exemples :
replaceWithList(Name, "C:\Filters\replacements.txt") -
applies replacements from file to file name
Replaces strings in str using regular expression
patterns loaded from a tab-separated file. The file format is one pattern
per line: regex_pattern<TAB>replacement_string.
The replacement string can include backreferences ($1, $2, etc.) to captured
groups. Lines starting with # are treated as comments
and ignored. Empty lines are also ignored. If
str is an array, the result is an array of
strings with replacements applied.
File format example:
# Comment line
\d+ NUMBER
(\d{4})-(\d{2})-(\d{2}) $1_$2_$3
Exemples :
regexReplaceWithList(Name,
"C:\Filters\regex_replacements.txt") - applies regex replacements
to file name
Normalise la chaîne Unicode. Le paramètre optionnel 'form' spécifie la forme
de normalisation : "NFC" ou "C" (par défaut), "NFD" ou "D", "NFKC" ou "KC",
"NFKD" ou "KD". On peut aussi utiliser les formes numériques : 1=NFC, 2=NFD,
5=NFKC, 6=NFKD. Si str est un tableau, le
résultat est un tableau de chaînes normalisées. Exemple :
normalizeUnicode(name, "NFC")
str)
Convertit tous les caractères de la chaîne en minuscules. Si
str est un tableau, le résultat est un tableau de
chaînes en minuscules. Exemple : toLower("Hello World")
renvoie "hello world"
str)
Convertit tous les caractères de la chaîne en majuscules. Si
str est un tableau, le résultat est un tableau de
chaînes en majuscules. Exemple : toUpper("Hello World")
renvoie "HELLO WORLD"
str)
Convertit les caractères de pleine chasse (full-width) en caractères de
demi-chasse (half-width). Principalement utilisé pour convertir les
caractères alphanumériques et katakana de pleine chasse. Si
str est un tableau, le résultat est un tableau de
chaînes converties.
str)
Convertit les caractères de demi-chasse en caractères de pleine
chasse. Principalement utilisé pour convertir les caractères alphanumériques
et katakana de demi-chasse. Si str est un
tableau, le résultat est un tableau de chaînes converties.
str)
Convertit les caractères hiragana en katakana. Les caractères non-hiragana
restent inchangés. Si str est un tableau, le
résultat est un tableau de chaînes converties.
str)
Convertit les caractères katakana en hiragana. Les caractères non-katakana
restent inchangés. Si str est un tableau, le
résultat est un tableau de chaînes converties.
str)
Convertit les caractères chinois traditionnels en caractères chinois
simplifiés. Les caractères qui n'ont pas de forme simplifiée restent
inchangés. Si str est un tableau, le résultat est
un tableau de chaînes converties.
str)
Convertit les caractères chinois simplifiés en caractères chinois
traditionnels. Les caractères qui n'ont pas de forme traditionnelle restent
inchangés. Si str est un tableau, le résultat est
un tableau de chaînes converties.
Renvoie la date et l'heure actuelles sous forme d'une valeur
Timestamp.
Renvoie la date du jour sous forme d'une valeur Timestamp
représentant 00:00:00.000 au début de la journée.
timestamp)Renvoie le premier jour de la semaine, qui est toujours le dimanche quel que soit le paramètre régional.
timestamp)Renvoie le premier jour du mois.
timestamp)Renvoie le premier jour de l'année.
timestamp)Convertit l'horodatage donné en une chaîne de date au format
yyyy-MM-dd. Si timestamp est
un tableau d'horodatages, le résultat est un tableau de chaînes.
value)Renvoie la valeur absolue de l'entier ou du tableau
d'entiers. Si value est un tableau
d'entiers, le résultat est un tableau d'entiers.
booleans)Renvoie true si tous les éléments du tableau de
booléens satisfont à la condition.
array)Renvoie true si toutes les valeurs du tableau sont
égales.
value, min,
max)
Renvoie true si value se situe
dans la plage [min, max] (inclusif aux deux
extrémités). Prend en charge les entiers, les nombres à virgule flottante,
les horodatages et les chaînes (comparaison insensible à la casse). Si
value est un tableau, le résultat est un tableau
de booléens où chaque élément est vérifié individuellement.
Exemples :
isWithin(5, 1, 10) renvoie true
isWithin(Size, 1KB, 10MB) vérifie si la taille de l'un
des fichiers est comprise entre 1 Ko et 10 Mo
isWithin(Date, today() - 7days, today()) vérifie si le
fichier a été modifié au cours de la dernière semaine
allof(isWithin(Size, 1KB, 10MB)) vérifie si toutes les
tailles de fichiers sont comprises entre 1 Ko et 10 Mo
value, min,
max)
Renvoie true si value se situe
dans la plage [min, max) (borne inférieure incluse, borne
supérieure exclue). Prend en charge les entiers, les nombres à virgule
flottante, les horodatages et les chaînes (comparaison insensible à la
casse). Si value est un tableau, le résultat est
un tableau de booléens où chaque élément est vérifié individuellement.
Exemples :
inRange(5, 1, 10) renvoie true
inRange(10, 1, 10) renvoie false
inRange(Size, 0, 1MB) vérifie si la taille de l'un des
fichiers est inférieure à 1 Mo
anyof(inRange(Date, startOfMonth(today()), today()))
vérifie si un fichier a été modifié ce mois-ci (aujourd'hui exclu)
value1,
value2, ...),
logWarn(value1,
value2, ...),
logInfo(value1,
value2, ...)Envoie la représentation sous forme de chaîne concaténée de tous les arguments dans le journal (respectivement au niveau erreur, avertissement ou information), séparés par des espaces, et renvoie la valeur du dernier argument. Ces fonctions sont utiles pour déboguer les expressions de filtre.
Exemples (utilisant la valeur de retour) :
logInfo("File size:", Size) > 1MB - consigne la/les
taille(s) de fichier et vérifie si elle est supérieure à 1 Mo
logWarn("Processing:", Name) like "*.tmp" - consigne
le/les nom(s) de fichier et vérifie s'il s'agit d'un fichier temporaire
Size > 1KB and logInfo("Large file:", Name) contains
"test" - ne consigne que si la condition de taille est vraie, puis
vérifie le nom
condition,
trueValue, falseValue)
Renvoie trueValue si la
condition est évaluée à vrai, sinon renvoie
falseValue. Cette fonction effectue une
évaluation en court-circuit (elle n'évalue que la branche qui sera
renvoyée).
Exemples :
if(Size > 1MB, "large", "small") - renvoie "large" ou
"small" selon la taille du fichier
if(Extension = "txt", "text file", "other file") -
classifie les fichiers par extension
if(Exists, Size, 0) - renvoie la taille du fichier ou 0
si le fichier n'existe pas
conditionArray,
trueValue, falseValue)
Sélection conditionnelle par élément. Pour chaque élément de
conditionArray, renvoie l'élément correspondant
de trueValue si la condition est vraie, sinon
renvoie l'élément correspondant de falseValue. Si
trueValue ou
falseValue est un scalaire, il est diffusé à tous
les éléments.
Exemples :
ifEach(Size > 1MB, "large", "small") - renvoie un
tableau d'étiquettes "large"/"small" pour chaque fichier
ifEach(array(true, false, true), array("a", "b", "c"), array("x",
"y", "z")) - renvoie array("a", "y", "c")
anyof(ifEach(Size > 100KB, Size < 10MB, false)) -
vérifie si l'un des fichiers est compris entre 100 Ko et 10 Mo
index, value0,
value1, ...)
Sélectionne une valeur parmi les arguments en fonction de
l'index. Si l'index
est 0, renvoie value0 ; s'il est 1, renvoie
value1, etc. Les indices négatifs sont ramenés à
0. Les indices au-delà de la dernière valeur renvoient la dernière valeur.
Exemples :
choose(0, "first", "second", "third") - renvoie "first"
choose(DiffCode % 3, "equal", "different", "unique") -
associe des codes de diff à des étiquettes
choose(5, "a", "b", "c") - renvoie "c" (hors limites,
renvoie la dernière valeur)
indexArray,
value0, value1, ...)
Sélection de valeurs par élément. Pour chaque index de
indexArray, sélectionne la valeur correspondante
dans les arguments restants. Si indexArray est un
scalaire, se comporte comme choose.
Exemples :
chooseEach(array(0, 1, 2), "a", "b", "c") - renvoie
array("a", "b", "c")
chooseEach(array(0, 0, 1), "x", "y") - renvoie
array("x", "x", "y")
chooseEach(array(2, 0, 1), "first", "second", "third") -
renvoie array("third", "first", "second")
value1,
value2),
orEach(value1,
value2),
notEach(value)Opérations logiques par élément. Ces fonctions opèrent sur des booléens, des tableaux de booléens ou une combinaison des deux :
andEach - Opération ET logique
orEach - Opération OU logique
notEach - Opération NON logique (argument unique)
Lorsque les arguments sont des scalaires, renvoie un résultat booléen scalaire. Lorsqu'un argument est un tableau et l'autre un scalaire, le scalaire est diffusé à tous les éléments. Lorsque les deux arguments sont des tableaux, effectue l'opération élément par élément.
Exemples :
andEach(Size > 1KB, Size < 1MB) - fichiers entre 1
Ko et 1 Mo
orEach(Extension = "txt", Extension = "log") - fichiers
txt ou log
notEach(Exists) - fichiers qui n'existent pas
allof(andEach(Exists, Size > 0)) - tous les fichiers
existent avec une taille non nulle
anyof(notEach(Size > 1MB)) - n'importe quel fichier de
1 Mo ou moins
Les tailles de fichiers prennent en charge ces suffixes :
Ko, Mo, Go, ToLes durées prennent en charge ces suffixes :
semaines, semaine, s, jours, jour, j, heures, heure, hr, h, minutes, minute, min, m, secondes, seconde, sec, s, millisecondes, milliseconde, msec, msSize < 10KB - La taille de n'importe quel côté est
inférieure à 10 Ko
LeftSize >= 10MB - Le fichier du côté gauche fait au
moins 10 Mo
allof(Size < 1MB) - Tous les côtés font moins de 1 Mo
abs(LeftSize - RightSize) < 1KB - La différence de
taille est faible
DateStr = "2025-07-20" - Le fichier a été modifié pour la
dernière fois à cette date
Date >= today() - Modifié aujourd'hui ou plus tard
isWithin(Date, today() - 7days, today()) - Fichier
modifié au cours de la dernière semaine
inRange(Size, 1KB, 10MB) - La taille du fichier est
comprise entre 1 Ko (inclus) et 10 Mo (exclu)
allof(isWithin(Size, 100KB, 1MB)) - Toutes les tailles de
fichiers sont comprises entre 100 Ko et 1 Mo
AttrStr contains "R" - Le fichier est en lecture seule
Name matches "file[0-9]\.txt" - Regex sur le nom du
fichier
Content contains "Test" - Le contenu du fichier contient
le mot-clé
sublines(Content, 0, 1) contains "XML" - La première
ligne contient "XML"
(Extension = "log" and Size > 10MB) or (Date < today() -
7days) - Gros fichiers journaux ou fichiers de plus d'une semaine
AttrStr not contains "H" and Name like "*.tmp" - Fichiers
temporaires non cachés
isWithin(Extension, "a", "m") and inRange(Size, 0, 1MB) -
Fichiers avec extensions de 'a' à 'm' et taille inférieure à 1 Mo
toLower(Name) = "readme.txt" - Correspondance de nom de
fichier insensible à la casse
toHalfWidth(Name) like "*.txt" - Correspondance après
conversion pleine chasse en demi-chasse
Les filtres de fichiers sont des fichiers texte
portant l'extension flt. Ils vous permettent
d'appliquer plusieurs règles de filtrage à une comparaison de
dossiers. Contrairement aux masques de fichiers, les filtres de fichiers
peuvent inclure ou exclure des correspondances.
WinMerge installe un certain nombre de
filtres de fichiers prédéfinis. Si ces filtres ne fournissent pas le
filtrage dont vous avez besoin, vous pouvez créer les vôtres. Pour faciliter
cette tâche, WinMerge fournit également un fichier modèle nommé
FileFilter.tmpl. Cette section décrit comment appliquer
des filtres de fichiers aux comparaisons et documente la syntaxe des filtres
de fichiers. Utilisation de la boîte de dialogue Filtres décrit comment ajouter, modifier
et gérer les filtres.
WinMerge détecte automatiquement les filtres de fichiers dans ces emplacements :
C'est ici que sont installés les filtres de fichiers prédéfinis. Par
exemple, C:\Program Files\WinMerge\Filters. Vous pouvez
créer ou copier des fichiers de filtres à cet endroit pour les mettre à la
disposition de tous les utilisateurs de votre système.
Avant de créer un nouveau filtre de fichiers, vérifiez si les filtres prédéfinis ne contiennent pas déjà ce dont vous avez besoin. Sinon, vous pourriez trouver des exemples de règles utiles dans les fichiers existants.
L'emplacement de ce dossier est défini dans la page Système des options de
WinMerge. Par défaut, il est spécifié comme un sous-dossier dans votre
dossier de profil utilisateur (par exemple, Documents
sous Windows 10). Les filtres créés ou copiés ici ne sont normalement
visibles que par vous. Si vous créez de nouveaux filtres de fichiers, vous
pouvez les copier ici pour les garder privés.
Avant de pouvoir appliquer des filtres de fichiers existant dans un autre dossier, vous devez d'abord les installer.
Vous pouvez appliquer un filtre de fichier en utilisant l'une de ces méthodes :
Lorsque vous lancez une comparaison de dossiers à partir de la boîte de dialogue Sélectionner des fichiers ou des dossiers :
Après avoir choisi les dossiers 1er et 2e, cliquez sur à côté du champ Filtre.
Dans la boîte de dialogue Filtres, utilisez l'onglet Filtres de fichiers pour choisir un filtre et le charger dans le champ Filtre.
Si un filtre de fichier est actuellement activé, le filtre sélectionné est déjà chargé dans le champ Filtre.
Procédez à l'opération de comparaison. Le fichier présent dans le champ Filtre est appliqué au démarrage de l'opération.
Pour modifier le filtrage des fichiers après avoir déjà lancé une opération de comparaison de dossiers (par exemple, pour appliquer un filtre différent ou désactiver le filtrage) :
Cliquez sur → .
Dans la boîte de dialogue Filtres, configurez votre nouveau réglage de filtre de fichier, puis cliquez sur .
Le nouveau filtrage n'est pas appliqué automatiquement à la fermeture de la boîte de dialogue Filtres : appuyez sur F5 pour voir les nouveaux résultats dans la fenêtre de comparaison de dossiers.
Lorsque vous lancez une comparaison de
dossiers depuis la ligne de commande WinMerge, utilisez le drapeau
-f pour spécifier un filtre de fichier.
Cette section décrit la syntaxe des filtres de fichiers de WinMerge et fournit des directives pour les rédiger.
Le délimiteur de commentaire est ##. Après un délimiteur de
commentaire, tous les caractères d'une ligne sont ignorés. WinMerge ignore
la plupart des caractères d'espacement dans les règles. Cependant, un
commentaire doit toujours être précédé d'un ou plusieurs caractères
d'espacement (espace ou tabulation). Pour utiliser ## comme
caractères dans une règle, omettez le préfixe d'espace.
Les deux premières lignes requises d'un filtre de fichier sont :
Le nom du filtre tel qu'il apparaît dans la boîte de dialogue Fichiers
Le type de filtrage à appliquer. Spécifiez l'une de ces valeurs :
Inclut tout, sauf les éléments correspondant à la règle spécifiée.
Exclut tout, sauf les éléments correspondant à la règle spécifiée.
Lorsque vous choisissez la méthode d'exclusion (exclude), vous devez également ajouter une règle d (répertoire) qui spécifie les sous-dossiers. C'est généralement une bonne idée de spécifier tous les sous-dossiers, comme ceci :
d: \\*$ ## Subfolders
Ne confondez pas ces termes. Rappelez-vous que, dans les filtres de fichiers, une règle include ne spécifie pas ce qu'il faut inclure, elle spécifie ce qu'il ne faut pas inclure. De même, exclude ne spécifie pas ce qu'il faut exclure, elle spécifie ce qu'il ne faut pas exclure.
Ensuite, votre fichier doit contenir une ou plusieurs règles de filtrage. Vous pouvez ajouter autant de règles que vous le souhaitez. Il doit y avoir une règle par ligne, et chaque règle doit tenir sur une seule ligne (aucun saut de ligne n'est autorisé dans une règle). Une règle commence par un indicateur de type, suivi soit d'une expression régulière, soit d'une expression de filtre. Les indicateurs de type pris en charge sont :
regexpFaire correspondre les noms de fichiers à l'aide d'expressions régulières
regexpExclure les fichiers correspondant à la regex (Disponible depuis la 2.16.19)
regexpFaire correspondre les noms de dossiers à l'aide d'une regex
regexpExclure les dossiers correspondant à la regex (Disponible depuis la 2.16.19)
exprExpression de filtre pour les fichiers (ex: fe:Size < 1KB) (disponible depuis 2.16.49)
exprExpression de filtre pour exclure des fichiers (disponible depuis 2.16.49)
exprExpression de filtre pour les dossiers (disponible depuis 2.16.49)
exprExpression de filtre pour exclure des dossiers (disponible depuis 2.16.49)
exprFilter expression applied to both files and folders (e.g. e:Name like "Common*.*") (Available since 2.16.56)
exprFilter expression to exclude both files and folders (Available since 2.16.56)
Parmi les nombreux caractères spéciaux de regex, les suivants sont particulièrement importants dans les règles de filtrage de fichiers :
Fréquemment requis pour que les règles fonctionnent correctement.
Fréquemment requis pour que les règles fonctionnent correctement. Par exemple :
\.c$ ## ne correspond qu'aux noms de fichiers ayant l'extensionc. \.c ## correspond à toute extension commençant parc, commecppetcom.
Force les caractères spéciaux à correspondre à des caractères normaux. Par
exemple, pour faire correspondre un nom de dossier, faites précéder le
délimiteur barre oblique inversée du dossier d'une barre oblique inversée
(\\). Pour faire correspondre le point dans un nom de fichier,
spécifiez une barre oblique inversée suivie d'un point (\.).
Aucun caractère spécial ni caractère générique n'est utilisé pour faire correspondre les noms de fichiers. Pour faire correspondre tous les noms de fichiers d'un certain type, omettez simplement le nom du fichier.
Les règles sont insensibles à la casse. Par exemple, f: \.bat$
correspond à winmerge.bat et à
compare.BAT.
Example 6. Exemples de règles de filtrage de fichiers
Quelques règles de filtrage de fichiers simples :
f: \.cpp$ ## Correspond aux fichiers*.cppf: \.h$ ## Correspond aux fichiers*.hf: ^My ## Correspond aux fichiersMy*.*f: Dlg\. ## Correspond aux fichiers*Dlg.*d: \\test$ ## Correspond aux dossierstestd: ^\\Build$ ## Correspond aux dossiersBuildd: Temp$ ## Correspond aux dossiers*Temp(par exemple,FirstTemp) d: Src ## Correspond aux dossiers*Src*
Quelques règles avec des expressions régulières plus complexes :
f: ^\.#.*$ ## fichiers.#nom_fichier.versionf: Dlg\.c(pp)?$ ## fichiers*Dlg.cet*Dlg.cppf: ^I.*\.h$ ## fichiersI*.hf: Srv[1-9]\.def$ ## fichiers*Srv1.defà*Srv9.deff: ^[h,k,m] ## fichiersh*.*,k*.*, etm*.*
Dans une comparaison de fichiers, vous pouvez utiliser des filtres de lignes pour ignorer des lignes individuelles. Par exemple, vous pourriez utiliser des filtres de lignes pour ignorer les commentaires ou certains types de code généré, comme les horodatages des systèmes de contrôle de version. Chaque filtre de ligne est une règle, et vous pouvez appliquer n'importe quel nombre de filtres de lignes à une comparaison de fichiers.
Pour apprendre à ajouter, modifier et gérer les filtres, voir Utilisation de la boîte de dialogue Filtres.
Vous pouvez appliquer des filtres de lignes en utilisant l'une de ces méthodes :
Lorsque vous lancez une comparaison de fichiers à partir de la boîte de dialogue Sélectionner des fichiers ou des dossiers
Après avoir choisi le 1er et le 2e fichiers, cliquez sur à côté du champ Filtre.
Dans la boîte de dialogue Filtres, utilisez l'onglet Filtres de lignes pour activer les filtres que vous souhaitez utiliser (le cas échéant), ou pour voir quels filtres sont actuellement activés.
Le champ Filtre n'indique pas quels filtres de lignes sont activés.
Poursuivez l'opération de comparaison de fichiers. Les filtres de lignes activés sont appliqués au démarrage de l'opération.
Après avoir déjà lancé une opération de comparaison de fichiers (par exemple, pour appliquer des filtres différents ou désactiver le filtrage) :
Cliquez sur → .
Ouvrez l'onglet Filtres de fichiers.
Cochez les filtres de lignes individuels que vous souhaitez appliquer, et décochez ceux que vous ne souhaitez pas appliquer.
Vous pouvez également ajouter, modifier et supprimer des filtres de la liste en utilisant les boutons , et .
Pour activer le filtrage de lignes, cochez Activer les filtres de lignes. Pour le désactiver, décochez l'option.
Cliquez sur pour fermer la boîte de dialogue Filtres de fichiers.
Appuyez sur F5 pour appliquer vos modifications et actualiser la fenêtre de comparaison de fichiers.
Un filtre de ligne est une règle qui est évaluée par rapport à chaque différence sur une seule ligne dans vos fichiers comparés, si les règles de filtrage de lignes sont activées. Lorsqu'une règle correspond à une différence sur une seule ligne, la différence est ignorée.
Les différences ignorées sont marquées dans la fenêtre de comparaison de fichiers avec la couleur Différence ignorée (telle que définie dans la page Couleurs des options de WinMerge). Cela vous permet de distinguer les différences ignorées des autres types. Cependant, vous ne pouvez pas sélectionner ni fusionner une différence ignorée.
La correspondance des filtres de lignes peut être décrite en deux points :
Lorsqu'une règle correspond à n'importe quelle partie de la ligne, la différence entière est ignorée. Par conséquent, vous ne pouvez pas filtrer seulement une partie d'une ligne. Par exemple, supposons que deux fichiers présentent la différence suivante sur une seule ligne :
Fichier1 :
# Jean Sibelius
Fichier2 :
# Janne Sibelius
Sans filtrage, la ligne est détectée comme une différence. Mais si nous
appliquons une règle de filtrage de ligne avec l'expression ^#,
les lignes sont signalées comme identiques, car l'expression ne spécifie que
le premier caractère, qui correspond dans les deux fichiers.
Une règle ne s'applique à une différence de plusieurs lignes que si toutes les lignes correspondent. Par exemple, considérons cette différence de deux lignes :
Fichier1 :
# Jean Sibelius # Pekka Himanen
Fichier2 :
# Janne Sibelius Pekka Himanen
La même règle ^# correspond à la première ligne, mais pas à la
seconde. Par conséquent, la différence n'est pas ignorée.
C'est généralement une bonne pratique d'utiliser les marqueurs de début de
ligne ( ^ ) et de fin de ligne ( $ ) pour
contrôler vos motifs avec précision, car la règle est appliquée si n'importe
quelle partie d'une ligne correspond à l'expression.
Example 7. Exemples de filtres de lignes
^MYTAG$
Filtre les lignes qui correspondent exactement à MYTAG
^::
Filtre les lignes commençant par ::
^/\*.*\*/$
Filtre les lignes commençant par
et se terminant par /**/
^[1-5]00
Filtre les lignes commençant par les nombres 100, 200, 300, 400 et 500
Example 8. Règle de filtrage de ligne correspondant aux lignes d'ID CVS
Les lignes d'ID CVS ressemblent à ceci :
// $Id: Filters.xml 7591 2013-01-20 15:47:42Z christianlist $
... et peuvent être filtrées avec cette règle :
^// \WId: .*\$
Example 9. Filtrer les commentaires de numéro de ligne dans les fichiers po
les commentaires de numéro de ligne po ressemblent à ceci :
#: src/filename.c:766
... et peuvent être filtrées avec cette règle :
^#
Cette section décrit la boîte de dialogue Filtres, qui fournit des fonctions pour créer et gérer les filtres de fichiers et les filtres de lignes.
Pour ouvrir la boîte de dialogue Filtres, utilisez l'une ou l'autre de ces méthodes :
Dans la boîte de dialogue Sélectionner des fichiers ou des dossiers, cliquez sur à droite du champ Filtre. Vous utilisez cette méthode lorsque vous souhaitez appliquer un filtre de fichier à une opération de comparaison de dossiers.
Cliquez sur → . Cette méthode peut être utilisée à tout moment, sauf lorsque la boîte de dialogue Sélectionner des fichiers ou des dossiers est ouverte.
La boîte de dialogue Filtres possède un onglet pour chaque type de filtre WinMerge :
Choisissez cet onglet pour travailler avec les filtres de fichiers pour les opérations de comparaison de dossiers.
Choisissez cet onglet pour travailler avec les filtres de lignes pour les opérations de comparaison de fichiers.
Choisissez cet onglet pour travailler avec les filtres de substitution pour les opérations de comparaison de fichiers.
La partie principale de cet onglet est une liste de filtres de fichiers disponibles pour les opérations de comparaison de dossiers. La liste comprend les filtres de fichiers partagés, privés et installés que WinMerge connaît, comme décrit dans Emplacements des filtres de fichiers.
Vous devez activer un filtre de fichier pour le rendre disponible dans une opération de comparaison de dossiers, ou désactiver un filtre actuel pour qu'il ne soit plus utilisé :
Ouvrez la boîte de dialogue Filtres, si elle n'est pas déjà ouverte.
Sélectionnez un filtre de fichier ou dans la liste.
Cliquez sur pour fermer la boîte de dialogue Filtres.
Il existe plusieurs façons d'appliquer des filtres de fichiers après les avoir activés. Pour plus de détails, voir Appliquer des filtres de fichiers.
Utilisez ces boutons pour gérer votre liste de Filtres de fichiers et en créer de nouveaux :
Sélectionnez un filtre de fichier dans la liste et cliquez sur pour voir rapidement comment le filtre fonctionne. Voir Test des règles de filtrage de fichiers pour plus de détails.
Permet de localiser un filtre de fichier et de l'ajouter à la liste des filtres. Les filtres qui ne se trouvent ni dans le dossier partagé ni dans le dossier privé par défaut ne sont pas détectés à moins que vous ne les installiez.
Crée une nouvelle copie d'un modèle de fichier dans le dossier de filtres partagés ou privés, et l'ouvre dans votre éditeur par défaut. Modifiez le modèle et ajoutez vos règles, comme décrit dans Créer un filtre de fichier.
Sélectionnez un filtre de fichier dans la liste et cliquez sur pour ouvrir le fichier dans votre éditeur par défaut.
Sélectionnez un filtre de fichier dans la liste et cliquez sur pour supprimer le fichier et le retirer de la liste. Oui, le fichier est réellement supprimé !
Vos modifications sont enregistrées lorsque vous cliquez sur pour fermer la boîte de dialogue Filtres. Les filtres de lignes sont stockés dans le registre Windows.
Si les filtres installés avec WinMerge ne fournissent pas le filtrage dont vous avez besoin, vous pouvez créer les vôtres :
Cliquez sur → . Ou, depuis la boîte de dialogue Sélectionner des fichiers ou des dossiers, cliquez sur à droite du champ Filtre.
Dans l'onglet Filtres de fichiers de la boîte de dialogue Filtres, cliquez sur .
Dans la boîte de dialogue Filtre partagé ou privé, choisissez Filtre partagé ou Filtre privé (voir Emplacements des filtres de fichiers pour leurs usages) et cliquez sur OK.
La boîte de dialogue Sélectionner un nom de fichier pour le nouveau filtre s'ouvre dans le dossier des fichiers partagés ou privés de votre système (si le dossier privé n'existe pas, WinMerge le crée).
Dans la boîte de dialogue Sélectionner un nom de fichier pour le nouveau filtre, saisissez un nouveau nom de fichier et cliquez sur .
Ne choisissez pas un nom de fichier existant : pour modifier un fichier existant, revenez à l'étape 2 et cliquez sur Modifier au lieu de Nouveau.
WinMerge initialise le nouveau fichier avec le contenu du modèle
FileFilter.tmpl et l'ouvre dans votre éditeur de texte
par défaut.
Suivez les instructions du modèle pour l'éditer, en mettant à jour le nom et la description et en ajoutant des règles de filtrage comme décrit dans Syntaxe des filtres de fichiers. Enregistrez le fichier dans votre éditeur de texte.
Si vous souhaitez tester rapidement une règle que vous définissez, essayez de cliquer sur Tester dans la boîte de dialogue Filtres. Voir Test des règles de filtrage de fichiers pour plus de détails.
Si vous avez créé votre filtre dans l'un des dossiers
Filters standards et que la boîte de dialogue Filtres
n'affiche pas votre nouveau filtre, essayez de cliquer sur
pour la fermer, puis sur →
pour la rouvrir. La liste Filtres de fichiers devrait
maintenant inclure le nouveau filtre.
Si vous avez enregistré le fichier dans un autre emplacement sur votre système, WinMerge ne pourra pas le détecter à moins que vous ne l'installiez. Pour rendre un filtre de fichier détectable n'importe où sur votre système :
Cliquez sur dans la boîte de dialogue Filtres.
Dans la boîte de dialogue Localiser le fichier de filtre à installer,
naviguez jusqu'au fichier flt sur votre système et
cliquez sur . La liste des filtres de fichiers
devrait maintenant inclure le filtre installé.
Utilisez la boîte de dialogue Tester le filtre pour tester rapidement un filtre par rapport à des données d'exemple, afin de vous aider à développer de nouvelles règles ou à comprendre le fonctionnement des règles existantes. Cela peut être plus facile que de lancer une opération de comparaison complète.
À partir de la boîte de dialogue Filtres :
Dans l'onglet Filtres de fichiers, choisissez le filtre que vous souhaitez tester.
Si vous souhaitez voir les règles que vous allez tester, cliquez sur maintenant pour ouvrir le fichier afin de pouvoir le consulter pendant les étapes suivantes.
Cliquez sur .
Dans la boîte de dialogue Tester le filtre, choisissez le type de règle à tester :
Pour tester une règle de fichier f: dans votre filtre, décochez l'option Nom du dossier.
Pour tester une règle de dossier d:, cochez l'option Nom du dossier.
Saisissez le texte à tester.
Le texte doit être approprié au type de règle que vous testez. Par exemple, si vous avez coché l'option Nom du dossier, vous voudrez probablement saisir un nom de dossier, tel que \temp.
La zone Résultat affiche votre saisie, suivie de son
état : soit réussi (passed), soit
échoué (failed).
Utilisez cet onglet pour configurer et activer des filtres de lignes pour les opérations de comparaison de fichiers. L'onglet présente une liste de règles. Chaque règle contient une seule expression régulière. Vous pouvez appliquer n'importe quelle combinaison de règles de la liste à une comparaison de fichiers.
Sous la liste Expressions régulières se trouvent une zone d'édition et des boutons que vous pouvez utiliser pour mettre à jour la liste à tout moment en ajoutant, modifiant et supprimant des règles.
Pour ajouter une nouvelle règle :
Cliquez sur . Votre curseur d'édition est automatiquement activé dans la zone d'édition.
Saisissez une expression dans la zone d'édition sous la liste Expressions régulières.
Cliquez sur pour charger l'expression dans une nouvelle ligne de la liste.
Pour modifier une règle existante :
Sélectionnez la ligne et cliquez sur .
Modifiez l'expression dans la zone d'édition.
Cliquez sur quand vous avez terminé.
Pour supprimer une règle existante, sélectionnez (cochez) la règle et cliquez sur .
Dans la liste Expressions régulières, cochez uniquement les filtres que vous souhaitez appliquer, et décochez tous les filtres que vous ne souhaitez pas appliquer.
Cochez ou décochez l'option Activer les filtres de lignes. Si vous activez le filtrage, toutes les règles actuellement cochées dans la liste Expressions régulières seront utilisées. Si le filtrage est désactivé, aucune règle n'est utilisée, même si elle est cochée.
Cliquez sur pour fermer la boîte de dialogue Filtres et enregistrer vos réglages.
Il existe plusieurs façons d'appliquer des filtres de fichiers après les avoir activés. Pour plus de détails, voir Application des filtres de lignes.
Les expressions régulières peuvent être très complexes. Heureusement, la plupart des filtres de fichiers dans WinMerge utilisent des expressions d'extension simples, comme le montrent les exemples de cette rubrique. Les fichiers de filtres installés avec WinMerge comprennent de nombreux autres exemples utiles.
Enfin, il existe de nombreuses ressources sur le Web pour vous aider avec les regex, notamment ces sites :