Как проверить, идентичны ли два файла в сценарии оболочки Windows?

Я пишу сценарий оболочки, используя язык сценариев оболочки Windows NT(ish). (У меня на компьютере Windows 10.) Я хочу проверить, идентичны ли два текстовых файла. Если файлы идентичны, я хочу, чтобы мой скрипт делал одно. Если файлы не идентичны, я хочу, чтобы мой скрипт делал что-то еще. Скрипт не должен останавливаться, чтобы запросить ручной ввод дополнительных данных.

В списке "Похожие вопросы" есть вопросы о скриптах для Macintosh и bash. У этого также есть ответ о беге fc или же comp из командной строки, которые предоставляют подробный вывод. К несчастью, fc не возвращает результат %errorlevel% , а также comp просит ввести данные вручную вместо простого выхода.

У меня есть копия книги Тима Хилла о сценариях оболочки Windows NT. Страница 216 имеет следующую строку кода, где %D1% а также %D2% являются каталогами, но я не знаю, как изменить его для работы только с одной парой файлов:

for /f "tokens=*" %%I in ('fc /b %D1%\*.* %D2%\*.* ^| find /v "Comparing" ^| find /v "FC: no*"') do (set /a ERRORS+=1) & (echo %%I)

1 ответ

Решение

Вы можете использовать этот код:

fc /b file1 file2 > nul
if errorlevel 1 goto files_differ
[files are the same, do something here]

:files_differ
[files are not the same, do something here]

errorlevel из 1 возвращается, если файлы НЕ идентичны.

errorlevel из 2 означает, что один из файлов отсутствует.

> nul используется, чтобы скрыть вывод команды

Кроме того, вы можете использовать Busybox для Windows и проверить, совпадают ли хэши файлов.

Другие вопросы по тегам