1

Я пытаюсь использовать WinMerge для сравнения двух каталогов:

C:\Users ...\Desktop\ Сравнить \ 35_A

C:\Users ...\Desktop\ Сравнить \ 35_HS

## This is a directory/file filter for WinMerge 
## This filter lets through only files ASP.NET developers care about 
name: ASP.NET Devel 
desc: Lets through only files ASP.NET developer cares about

## This is an exclusive filter 
## (it lets through only matching files) 
def: exclude 

## Filters for filenames begin with f: 
## Filters for directories begin with d: 
## (Inline comments begin with " ##" and extend to the end of the line) 

f: \.xml$ 
f: \.xlst$
f: \.xsl$
f: \.xslt$
f: \.dtd$ 
f: \.html$ 
f: \.htm$ 
f: \.css$ 
f: \.gif$ 
f: \.bmp$ 
f: \.jpg$ 
f: \.png$ 
f: \.js$ 
f: \.dll$ 
f: \.aspx$ 
f: \.asmx$ 
f: \.ascx$ 
f: \.vb$ 
f: \.resx$ 
f: \.cs$ 
f: \.js$ 
f: \.vbproj$ 
f: \.csproj$ 
f: \.sln$ 
f: \.webinfo$ 
f: \.config$ 

d: \\*$ ## Subdirectories 

def: exclude
d: \\bin
d: \\obj

Последние 3 строки не являются частью фильтра, я добавил их, пытаясь игнорировать все и вся во всех каталогах \bin \ и \ obj \. Я пробовал оба def: include и def: exclude , ни один из них не дает точных результатов.

Я просмотрел справочную документацию в WinMerge о файловых фильтрах, но не понимаю этого.

3 ответа3

2

Включить и исключить относится к тому, что отображается в списке файлов и папок после сравнения. Фильтры и в том числе за исключением вещей из этого списка.

Если вы используете фильтр исключения , он исключает из списка файлов все, что не указано в фильтре.

Если вы используете фильтр включения , он включает в список файлов все, что не указано в фильтре.

В вашем случае вы используете исключение, поэтому вы будете видеть только те файлы и папки, которые вы специально указали в своем фильтре. Чтобы заблокировать папки bin и obj , вам нужно знать имена всех других папок, которые вы можете захотеть увидеть, чтобы они могли быть перечислены в вашем фильтре.

Я считаю, что для кода проще использовать фильтр включения. Таким образом, я могу заблокировать папки и файлы, которые меня не интересуют.

Измените первое def: для include и удалите второе def . Я думаю, что вы можете иметь только одну def . Ваши d: правила будут тогда

d: \\bin$
d: \\obj$
1

Как уже упоминали другие, вы можете иметь только одну def: строку, и фильтры фактически выполняют противоположное действие директивы def: (то есть, когда def exclude фильтры на самом деле включают файлы).

Итак, с этим знанием мы можем видеть, что следующая строка включает все подкаталоги.

d: \\*$ ## Subdirectories

У меня не установлен WinMerge, и я не знаком с движком RegEx, но вы можете попробовать использовать отрицательный поиск для включения всех подкаталогов, кроме "bin" и "obj":

d: ^\\((?!bin|obj)(.+)|(.+)(?<!bin|obj))$
0

У меня был некоторый ограниченный успех с ответом @ heavyyd, но позже я обнаружил, что это намного проще в очевидном преемнике WinMerge WinMerge2011.

С WinMerge2011 я использовал

xd: \\bin(\\.+|)$
xd: \\obj\\

Найти документацию может быть сложно, но я нашел http://forums.winmerge.org/viewtopic.php?f=4&t=1010

Фильтры файлов / каталогов были улучшены в WinMerge 2011, чтобы позволить объединять правила включения и исключения. Отсутствие метки def: в файле .flt приводит к тому, что f: и d: работают как правила включения, за исключением случаев, когда перед ними стоит префикс x, в этом случае они действуют как правила исключения. Метки f: и d: с необязательным префиксом x для формирования правила исключения также могут использоваться с фильтрами подстановочных знаков.

К вашему сведению WinMerge, похоже, больше не разрабатывается. Смотрите обзорные заметки в https://en.wikipedia.org/wiki/WinMerge. Загрузите WinMerge2011 по адресу https://bitbucket.org/jtuc/winmerge2011/downloads/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .