Как сравнить два файла в пакетном файле?
Как сравнить два файла в пакетном файле и выполнить действие, основанное на том, соответствуют ли они? Я пробовал что-то вроде:
if file1.txt NEQ file2.txt goto label
но он сравнивает фактическую строку "file1.txt", а не файл. Я читал о команде COMP, но, похоже, это не работает, если я помещаю ее в оператор if. Кто-нибудь знает, как это сделать? Извините, но я редко использую командные файлы и мало имею в них опыта.
Спасибо заранее.
Ответы
Ответ 1
Я считаю, что вы можете использовать команду "FC", а затем проверить уровень ошибок. Вот код:
@echo off
:main
fc c:\filename r:\filemame > nul
if errorlevel 1 goto error
:next
echo insert next CD
pause
goto main
:error
echo failed check
(Вытащено из http://www.computing.net/answers/dos/batch-file-command/15753.html)
Ответ 2
Кажется, что программа COMP на самом деле довольно проста в использовании. См. этот вопрос на ответы Yahoo.
Обратите внимание, что при запуске comp /?
будет напечатан текст справки для программы (как указано в аргументе /?
с любой собственной программой командной строки Windows). Это выводит тот же текст, который вы видите в ответе на вопрос, связанный выше.
Содержание ответа Yahoo:
C:\>comp /?
Compares the contents of two files or sets of files.
COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C] [/OFF[LINE]]
data1 Specifies location and name(s) of first file(s) to compare.
data2 Specifies location and name(s) of second files to compare.
/D Displays differences in decimal format.
/A Displays differences in ASCII characters.
/L Displays line numbers for differences.
/N=number Compares only the first specified number of lines in each file.
/C Disregards case of ASCII letters when comparing files.
/OFF[LINE] Do not skip files with offline attribute set.
To compare sets of files, use wildcards in data1 and data2 parameters.
Ответ 3
Я использую приведенный ниже пример для создания отчетов на основе различий файлов:
set %Batch_Work_Space_Dir%=folder for your batch file and temp resource files
set file_1=name of file
set file_2=name of file
fc %file_1% %file_1%t > %Batch_Work_Space_Dir%\Are_They_Different.txt
powershell -command "(Get-Content %Batch_Work_Space_Dir%\Are_They_Different.txt) | select -skip 1 | Set-Content %Batch_Work_Space_Dir%\Are_They_Different.txt"
set /p Diff_Found=<%Batch_Work_Space_Dir%\Are_They_Different.txt
if %Diff_Found:~0,17%" == "FC: no difference" (
execute commands
)