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

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

2 ответа

Решение

Это может быть достигнуто с помощью || конструкция, которая выполняет команду только с правой стороны, если статус выхода команды с левой стороны равен 0. fcвыходной статус равен 0, если он не обнаружил различий, cat Команда не будет выполнена.

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

Если используется в командном файле, @ должен быть добавлен так, чтобы введенная строка не отражалась:

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

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
)
Другие вопросы по тегам