2017-02-15 23 views
2

Я хочу сравнить 2 текстовых файла, используя команду cmd.exe fc. Тем не менее, он печатает строку выше и строку ниже строки с несогласованностью. Как я могу подавить это поведение?Команда Windows CMD/BATCH - команда FC, показывающая соответствие выше/ниже строк

a.txt

 
32=10500.3000000 
31=5252.8095 
30=XXXX 
75=20170208 00:32:40 
6=5252.8095 
60=20170208-00:00:03 

b.txt

 
32=10500.3000000 
31=5252.8095 
30=YYYY 
75=20170208 00:32:40 
6=5252.8095 
60=20170208-00:00:03 

Команда - fc /l /n /c /t /lb200 a.txt b.txt1

Выход Сравнение файлов a.txt и b.txt

 
***** a.txt 
    2: 31=5252.8095 
    3: 30=XXXX 
    4: 75=20170208 00:32:40 
***** B.TXT 
    2: 31=5252.8095 
    3: 30=YYYY 
    4: 75=20170208 00:32:40 
***** 

What I Want

 
***** a.txt 
    3: 30=XXXX 
***** B.TXT 
    3: 30=YYYY 
***** 
+0

Это невозможно без использования цикла 'for/f' вокруг команды или сторонней утилиты – samdd

+0

для цикла для сравнения по строкам? –

+0

'for/f' loop для удаления первой строки до и после каждого появления' ***** ' – samdd

ответ

2

Вы можете использовать это в качестве отправной точки

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    for /f "tokens=1,* delims=: eol=*" %%a in (' 
     fc /l /n /t /c 1.txt 2.txt 
    ') do (
     if defined _%%a (
      set "line=%%b" 
      setlocal enabledelayedexpansion 
      if not !_%%a!==!line! (
       echo(%%a: !_%%a! 
       echo(%%a: !line! 
       echo(
      ) 
      endlocal 
      set "_%%a=" 
     ) else set "_%%a=%%b" 
    ) 

При обработке выхода из fc, для каждого номера строки определяется переменная. Когда тот же номер строки найден, содержимое переменной сравнивается с новой строкой, и если они отличаются, то две строки повторяются.

+0

Спасибо. Я попробовал что-то подобное, но это очень сложный способ обхода. В случае отсутствия/дополнительных строк в текстовых файлах я бы пропустил эти различия. –

+1

@PankajJaju, вы правы, 'fc' очень ограничен, и этот код просто наследует свои ограничения. В любом случае, для небольшого диапазона различий 'fc' должно быть достаточно –

0

Даже если вы не подходите к выбранным тегам, в этих случаях я всегда рекомендую инструмент, например windiff или WinMerge, с боковым сопоставлением. См. Также Gui-diff-tools. Некоторые редакторы предлагают аналогичный вариант, например TextPad.