Как проверить, идентичны ли два файла в сценарии оболочки 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 и проверить, совпадают ли хэши файлов.