Wie unterdrücke ich die Ausgabe mit fc, wenn keine Unterschiede bestehen?

4026
René Nyffenegger

Ich möchte eine Reihe von Dateien in einer cmd.exe-Batchdatei mit vergleichen fc. Leider wird fcfür jedes Paar verglichener Dateien berichtet, dass es keine Unterschiede feststellt, wenn keine Unterschiede vorliegen. Wie kann ich dieses Verhalten so ändern, dass es stumm bleibt, wenn es keine Unterschiede gibt und nur berichtet, wenn eine Datei tatsächlich anders ist?

3

2 Antworten auf die Frage

1
STTR

1.cmd:

fc /b 1.cmd 1.cmd 

2.cmd:

@ECHO OFF CLS fc /b 1.cmd 1.cmd ECHO . ECHO Test1, ErrorLevel: %ERRORLEVEL%  fc 1.cmd 2.cmd ECHO Test2, ErrorLevel: %ERRORLEVEL% fc /b 1.cmd 3.cmd ECHO Test3, ErrorLevel: %ERRORLEVEL% ECHO . fc /cb ECHO Test4, ErrorLevel: %ERRORLEVEL% 

Lauf 2.cmd

Rusult:

  • Test1, ErrorLevel: 0 / FC: Es wurden keine Unterschiede festgestellt
  • Test2, ErrorLevel: 1 / verschiedene Dateien
  • Test3, ErrorLevel: 2 / Mindestens eine der Dateien kann nicht gefunden werden
  • Test4, ErrorLevel: -1 / Ungültige Syntax

5.cmd:

@ECHO OFF CLS fc /b %1 %2  If "%ERRORLEVEL%"=="1" ( @ECHO diff! 

<- mach was du brauchst ... ->

)  If "%ERRORLEVEL%"=="0" ( @ECHO No diff! )  If "%ERRORLEVEL%"=="2" ( @ECHO Echo File not found )  If "%ERRORLEVEL%"=="-1" ( @ECHO Echo Invalid syntax ) 
Dies gibt immer noch etwas aus, wenn keine Unterschiede bestehen. René Nyffenegger vor 8 Jahren 0
1
René Nyffenegger

Dies kann erreicht werden, indem das ||Konstrukt verwendet wird, das den Befehl auf der rechten Seite nur ausführt, wenn der Beendigungsstatus des Befehls auf der linken Seite 0 ist. Da fcder Beendigungsstatus 0 ist, wenn er keine Unterschiede feststellt, ist der catBefehl nicht der Fall Lauf.

fc file1.xyz file2.xyz > c:\temp\fc.out || cat c:\temp\fc.out 

Bei Verwendung in einer Batch-Datei @sollte a vorangestellt werden, damit die angefangene Zeile nicht wiederholt wird:

@fc %1 %2 > c:\temp\fc.out || cat c:\temp\fc.out