[Résolu] Comparaison Groupe de Fichiers

Comparaison Groupe de Fichiers [Résolu] - Shell/Batch - Programmation

Marsh Posté le 26-06-2008 à 12:59:31    

Bonjour !
 
Comme je suis en train de customizer l'ensemble des *.dll, *.exe, *.cpl et *.ocx de mon système, que cela prend beaucoup de temps et que les Mises à Jour de Windows continuent de se faire, je souhaiterais créer un batch pour comparer un par un les fichiers originaux que j'ai préalablement sauvegardé dans un dossier et ceux contenus dans le système ("C:\Windows\", "C:\Windows\System32\" et autres).
 
Dans un post précédent j'ai appris à "utiliser" : for /f "delims=" %%a in (dossiers.txt) do commande "%%a"    où "dossiers.txt" contenait les chemins et noms des dossiers auquels je voulais affecter une "commande".
 

  • J'ai vu également que les commandes "Comp" et "Find" servaient à comparer 2 fichiers, laquelle dois-je utiliser ?
  • Comment organiser mon batch pour qu'il compare les sauvegardes de mes fichiers originaux dont le chemin est contenu dans un fichier "Save.txt" et les fichiers du système dont le chemin est contenu dans un fichier "Systeme.txt" ? (si c'est la bonne méthode...)
  • Enfin, quelle commande dois-je utiliser pour que les fichiers différents ou non trouvés me soient indiqués dans un fichier texte ?


Merci...


Message édité par Scoubi7 le 04-07-2008 à 16:06:13
Reply

Marsh Posté le 26-06-2008 à 12:59:31   

Reply

Marsh Posté le 01-07-2008 à 13:24:12    

Faut que les fichiers a verifier aient le meme nom.
Là c'est pour verifier dans system et system32, tu peux rajouter si besoin.
On suppose que les fichier qui contiennent les noms des fichiers sont dans c:\
Les sauvegardes dans c:\backup
 
 
cd c:\
if exist incorrect.txt del incorrect.txt
set bckfolder=c:\backup
set sysfolder=c:\windows
set sys32folder=c:\windows\system32
for /f "delims=" %%a in (save.txt) do call :cmd "%%a"
for /f "delims=" %%a in (save32.txt) do call :cmd32 "%%a"
echo Les fichiers incorrectes sont affiches dans c:\incorrect.txt
pause
exit
 
:cmd
set file=%~1
echo N | comp "%backfolder%\%file%" "%sysfolder%\%file%" > NUL 2> NUL
if errorlevel 1 echo %sysfolder%\%file% >> incorrect.txt
goto :eof
 
:cmd32
set file=%~1
echo N | comp "%backfolder%\%file%" "%sys32folder%\%file%" > NUL 2> NUL
if errorlevel 1 echo %sys32folder%\%file% >> incorrect.txt
goto :eof

Reply

Marsh Posté le 02-07-2008 à 14:10:40    

Tout d'abord merci pour ta réponse et le temps que tu y as accordé !
 
D'autre part, suis-je obligé d'avoir un fichier texte pour chaque répertoire, ne puis-je avoir un seul fichier *.txt où est indiqué le chemin et le nom du dossier ?
 
Pour cela j'ai bidouillé un peu ton batch...
cd C:\  
if exist Differences.txt del Differences.txt  
set bckfolder=C:\A_Comparer
for /f "delims=" %%a in (A_Comparer.txt) do call :cmd "%%a"  
echo Les fichiers differents sont affiches dans C:\Differences.txt  
pause  
exit  
 
:cmd  
set file=%~1  
echo N | comp "%backfolder%\%file%" "%file%" > NUL 2> NUL  
if errorlevel 1 echo %file% >> Differences.txt  
goto :eof

 
Mais dans mon fichier "Differences.txt", tous les fichiers comparés y sont affichés !
Je pense que mon erreur vient de : echo N | comp "%backfolder%\%file%" "%file%" > NUL 2> NUL
 
Ne sachant comment corriger cette erreur, pourrais-tu encore m'aider ?


Message édité par Scoubi7 le 02-07-2008 à 14:11:48
Reply

Marsh Posté le 02-07-2008 à 22:43:42    

La variable est %bckfolder% et pas %backfolder%
 
Dans ton fichier A_Comparer.txt tu dois mettre le chemin complet de tes fichiers alors, c'est a dire : C:\undossier\blabla\test.ocx
 
Je pense que c'est tout...

Reply

Marsh Posté le 03-07-2008 à 07:57:49    

Alors là, je ne comprend pas...
 
Mon fichier "A_Compare.txt" ressemblait bien à ce que tu m'as indiqué, mais en changeant le %bckfolder%, j'ai toujours le même résultat (la liste de tous les fichiers se retrouve dans "Differences.txt" )...
 
Alors qu'avec cmd, en tappant "comp.exe c:\A_Comparer\grpconv.exe C:\Windows\System32\grpconv.exe" il m'indique bien que les fichiers sont identiques...

Reply

Marsh Posté le 03-07-2008 à 12:00:44    

Le problème vient de la méthode que tu voulais utiliser en faisant ce que t'as voulu faire à ce post là :
http://forum.hardware.fr/hfr/Progr [...] m#t1754565
 
Je corrige :
cd C:\
if exist Differences.txt del Differences.txt
set bckfolder=C:\A_Comparer
for /f "delims=" %%a in (A_Comparer.txt) do call :cmd "%%a"
echo Les fichiers differents sont affiches dans C:\Differences.txt
pause
exit
 
:cmd
set fullfile=%~1
set file=%~nx1
echo N | comp "%bckfolder%\%file%" "%fullfile%" > NUL 2> NUL
if errorlevel 1 echo %fullfile% >> Differences.txt
goto :eof

Reply

Marsh Posté le 03-07-2008 à 13:48:40    

Je suis désolé, j'ai copié/collé ton nouveau code et ça ne marche toujours pas...
 
As-tu fait le test chez toi ou puis-je t'envoyer mes différents fichiers pour voir si l'erreur ne vient pas d'un oubli que j'aurais fait chez moi ?


Message édité par Scoubi7 le 03-07-2008 à 15:40:18
Reply

Marsh Posté le 03-07-2008 à 18:49:09    

Montre moi les premieres lignes de ton fichier A_comparer.txt
Je viens de test avec un fichier, sa marche....
 
T'es sous quel windows ?

Reply

Marsh Posté le 04-07-2008 à 07:22:21    

Je suis sous windows XP et mon fichier "A_Comparer.txt" commence comme ça :
 
C:\Windows\System32\grpconv.exe
C:\Windows\PCHealth\HelpCtr\Binaries\helpctr.exe

Reply

Marsh Posté le 04-07-2008 à 14:47:34    

Chez moi sa marche niquel...
 
c:\fichier.bat

Code :
  1. cd C:\
  2. if exist Differences.txt del Differences.txt
  3. set bckfolder=C:\A_Comparer
  4. for /f "delims=" %%a in (A_Comparer.txt) do call :cmd "%%a"
  5. echo Les fichiers differents sont affiches dans C:\Differences.txt
  6. pause
  7. exit
  8. :cmd
  9. set fullfile=%~1
  10. set file=%~nx1
  11. echo N | comp "%bckfolder%\%file%" "%fullfile%" > NUL 2> NUL
  12. if errorlevel 1 echo %fullfile% >> Differences.txt
  13. goto :eof


 
c:\A_comparer.txt

Code :
  1. C:\Windows\System32\ahui.exe
  2. C:\Windows\PCHealth\HelpCtr\Binaries\helpctr.exe


 
et le dossier C:\A_comparer\ contient ahui.exe et helpctr.exe
 
J'ai modifier ahui.exe pour tester et il me le ressort bien dans le fichier Differences.txt
 
J'peux pas mieux t'expliquer comment tout ça fonctionne, t'avais peut etre mal mis les fichiers au bon endroit ? Si c'est pas ça, j'peux pas t'aider...
 
 
Ce qui me ressort dans la console

Code :
  1. C:\>cd C:\
  2. C:\>if exist Differences.txt del Differences.txt
  3. C:\>set bckfolder=C:\A_Comparer
  4. C:\>for /F "delims=" %a in (A_Comparer.txt) do call :cmd "%a"
  5. C:\>call :cmd "C:\Windows\System32\ahui.exe"
  6. C:\>set fullfile=C:\Windows\System32\ahui.exe
  7. C:\>set file=ahui.exe
  8. C:\>echo N   | comp "C:\A_Comparer\ahui.exe" "C:\Windows\System32\ahui.exe"  1>N
  9. UL 2>NUL
  10. C:\>if errorlevel 1 echo C:\Windows\System32\ahui.exe  1>>Differences.txt
  11. C:\>goto :eof
  12. C:\>call :cmd "C:\Windows\PCHealth\HelpCtr\Binaries\helpctr.exe"
  13. C:\>set fullfile=C:\Windows\PCHealth\HelpCtr\Binaries\helpctr.exe
  14. C:\>set file=helpctr.exe
  15. C:\>echo N   | comp "C:\A_Comparer\helpctr.exe" "C:\Windows\PCHealth\HelpCtr\Bin
  16. aries\helpctr.exe"  1>NUL 2>NUL
  17. C:\>if errorlevel 1 echo C:\Windows\PCHealth\HelpCtr\Binaries\helpctr.exe  1>>Di
  18. fferences.txt
  19. C:\>goto :eof
  20. C:\>echo Les fichiers differents sont affiches dans C:\Differences.txt
  21. Les fichiers differents sont affiches dans C:\Differences.txt
  22. C:\>pause
  23. Appuyez sur une touche pour continuer...


 
Montre le tiens si sa marche toujours pas.


Message édité par blastkiller le 04-07-2008 à 14:48:45
Reply

Marsh Posté le 04-07-2008 à 14:47:34   

Reply

Marsh Posté le 04-07-2008 à 16:05:22    

Non tout était au bon endroit mais j'avais dû faire une erreur dans "fichier.bat"... mais même en relisant je ne vois pas de différences !
 
En tous cas ça marche merci beaucoup pour ton travail et ta patience !!!


Message édité par Scoubi7 le 04-07-2008 à 16:05:45
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed