Как мне подавить вывод с помощью 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
)