web-dev-qa-db-fra.com

Comment comparer deux fichiers dans un fichier batch?

Comment comparer deux fichiers dans un fichier de commandes et exécuter une action en fonction de leur correspondance ou non? J'ai essayé quelque chose comme:

if file1.txt NEQ file2.txt goto label

mais il compare la chaîne réelle "fichier1.txt" plutôt que le fichier. J'ai lu sur la commande COMP, mais cela ne semble pas fonctionner si je le mets dans une instruction if. Est-ce que quelqu'un sait comment faire cela? Désolé, mais j'utilise rarement des fichiers de commandes et j'ai peu d'expérience.

Merci d'avance.

16
Cory Walker

Je crois que vous pouvez utiliser la commande "FC" puis vérifier le niveau d'erreur. Voici un code:

@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

(Extrait de http://www.computing.net/answers/dos/batch-file-command/15753.html )

29
matt_h

Il semble que le programme COMP soit en fait assez facile à utiliser. Voir cette question sur Yahoo réponses.

Notez que l'exécution de comp /? imprimera le texte d'aide du programme (tout comme la spécification de l'argument /? avec tout programme de ligne de commande Windows natif). Ceci produit le même texte que vous voyez dans la réponse à la question liée ci-dessus.

Contenu de la réponse 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
Noldorin

J'utilise l'exemple ci-dessous pour créer des rapports basés sur les différences de fichiers:

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
 )
0
David