Как мне подавить вывод с помощью fc, когда нет различий

3989
René Nyffenegger

Я хочу сравнить кучу файлов в командном файле cmd.exe, используя fc. К сожалению, fcдля каждой пары сравниваемых файлов сообщается, что различий не обнаружено, если нет различий. Как я могу изменить это поведение, чтобы оно молчало, когда нет различий, и только сообщало, если файл действительно отличается?

3

2 ответа на вопрос

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% 

бежать 2.cmd

Rusult:

  • Test1, ErrorLevel: 0 / FC: различий не обнаружено
  • Test2, ErrorLevel: 1 / разные файлы
  • Test3, ErrorLevel: 2 / Не удается найти хотя бы один из файлов
  • Test4, ErrorLevel: -1 / неверный синтаксис

5.cmd:

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

<- делай то, что тебе нужно ... ->

)  If "%ERRORLEVEL%"=="0" ( @ECHO No diff! )  If "%ERRORLEVEL%"=="2" ( @ECHO Echo File not found )  If "%ERRORLEVEL%"=="-1" ( @ECHO Echo Invalid syntax ) 
Это все еще печатает что-то, если нет различий. René Nyffenegger 9 лет назад 0
1
René Nyffenegger

It can be achieved by using the || construct which only executes the command on the right side if the exit status of the command on the left side is 0. Since fc's exit status is 0 if it found no differences, the cat command won't be run.

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

If used in a batch file, a @ should be prepended so that the entired line is not echoed:

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

Похожие вопросы