3

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

2 ответа2

1

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
)
1

Это может быть достигнуто с помощью || конструкция, которая выполняет команду только на правой стороне, если статус выхода команды на левой стороне равен 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .