2017-02-15 71 views
2

我想使用cmd.exe的fc命令比較2個文本文件。但是,它也是在不匹配行的上面和下面打印行。我如何抑制這種行爲?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 
***** 

我想要的東西

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

如果沒有在命令周圍使用'for/f'循環或第三方實用程序 – samdd

+0

for循環來逐行比較,這是不可能的? –

+0

'for/f'循環在每次出現'*****'之前和之後移除第一行 – 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的選項。 Winmerge