2017-02-15 134 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