batch windows+comparer deux repertoires+lister fichiers differents

Le
TOF
Bonjour

Je cherche à comparer les fichiers de 2 repertoires (avec toute
l'arborescense) et de récuperer une liste de fichiers nouveaux ou modifiés
(conserver les +recents) avec leur chemin respectif dans un fichier txt.

J'ai essayé de m'inspirer d'un batch ou l'utilisateur compare 2 repertoires
mais dans c:windowssystem32.

Je n'arrive pas à interpoler cette recherche à 2 emplacements persos (par
exemple c:monrep)

De + A la difference du script ci dessous où un fichier A_Comparer.txt donne
la liste des fichiers à comparer, moi je veux le faire pour tous les
fichiers contenus dans mes 2 dossiers

Merci d'avance

Code :

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



tof
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
dominique
Le #16692821
TOF wrote:
Bonjour

Je cherche à comparer les fichiers de 2 repertoires (avec toute
l'arborescense) et de récuperer une liste de fichiers nouveaux ou modifiés
(conserver les +recents) avec leur chemin respectif dans un fichier txt.

J'ai essayé de m'inspirer d'un batch ou l'utilisateur compare 2 repertoires
mais dans c:windowssystem32.

Je n'arrive pas à interpoler cette recherche à 2 emplacements persos (par
exemple c:monrep)




un vieux truc archivé qui fait à peu près ça :

@echo off
setlocal

if exist compare.log del compare.log

set dirA=C:dir1
set dirB=C:dir2

for /R "%dirA%" %%I in (*.*) do call :_process "%%I"
for /R "%dirB%" %%I in (*.*) do call :_process "%%I"
goto :eof

:_process
set relpath=%~1
echo 1%relpath%
call set relpath=%%relpath:%dirA%=%%
echo 2%relpath%
if exist "%dirB%%relpath%" (
fc /A /W /L /N "%dirA%%relpath%" "%dirB%%relpath%" >> compare.log
) else (
echo %~n1%~x1 exists only in %~d1%~p1 >> compare.log
)

goto :eof
pause
TOF
Le #16695681
Salut

merci pour ce code mais j'ai 2 remarques:
- pourquoi il re liste l'intégralité des fichiers du dir2 en disant qu'ils
ne sont que dans dir2 à la fin dans le compare.log?
- n'est il pas possible de n'avoir que le chemin des fichiers qui sont
différents dans le compare.log?

merci par avance

tof

"dominique" discussion : g9hfrq$krv$
TOF wrote:
Bonjour

Je cherche à comparer les fichiers de 2 repertoires (avec toute
l'arborescense) et de récuperer une liste de fichiers nouveaux ou
modifiés
(conserver les +recents) avec leur chemin respectif dans un fichier txt.

J'ai essayé de m'inspirer d'un batch ou l'utilisateur compare 2
repertoires
mais dans c:windowssystem32.

Je n'arrive pas à interpoler cette recherche à 2 emplacements persos (par
exemple c:monrep)




un vieux truc archivé qui fait à peu près ça :

@echo off
setlocal

if exist compare.log del compare.log

set dirA=C:dir1
set dirB=C:dir2

for /R "%dirA%" %%I in (*.*) do call :_process "%%I"
for /R "%dirB%" %%I in (*.*) do call :_process "%%I"
goto :eof

:_process
set relpath=%~1
echo 1%relpath%
call set relpath=%%relpath:%dirA%=%%
echo 2%relpath%
if exist "%dirB%%relpath%" (
fc /A /W /L /N "%dirA%%relpath%" "%dirB%%relpath%" >> compare.log
) else (
echo %~n1%~x1 exists only in %~d1%~p1 >> compare.log
)

goto :eof
pause


dominique
Le #16702831
TOF wrote:
Salut

merci pour ce code mais j'ai 2 remarques:
- pourquoi il re liste l'intégralité des fichiers du dir2 en disant
qu'ils ne sont que dans dir2 à la fin dans le compare.log?
- n'est il pas possible de n'avoir que le chemin des fichiers qui sont
différents dans le compare.log?

merci par avance



Ca buggait un peu..
Ca doit être mieux.
Pour le compare.log, c'est à toi de gérer la sortie de la commande fc
comme dans ton exemple avec errorlevel...


@echo off
setlocal

if exist compare.log del compare.log

set dirA=D:dir1
set dirB=D:dir2

for /R "%dirA%" %%I in (*.*) do call :_process "%%I" 1
for /R "%dirB%" %%I in (*.*) do call :_process "%%I" 2
goto :eof

:_process
if %~2==1 (
set dir1=%dirA%
set dir2=%dirB%
) else (
set dir1=%dirB%
set dir2=%dirA%
)
set relpath=%~1
call set relpath=%%relpath:%dir1%=%%
if exist "%dir2%%relpath%" (
if %~2==1 (
fc /A /W /L /N "%dir1%%relpath%" "%dir2%%relpath%" >> compare.log
) ) else (
echo %~n1%~x1 exists only in %~d1%~p1 >> compare.log
)
TOF
Le #16704981
Salut

un grand merci à toi dominique. cela fait exactement ce que je veux....

c'etait trop dur pour un newbie comme moi

voici le code final tel que je le voulais:

@echo OFF
setlocal

if exist compare.log del compare.log
if exist effacer.log del effacer.log

set dirA=c:dir1
set dirB=c:dir2

for /R "%dirA%" %%I in (*.*) do call :_process "%%I" 1
for /R "%dirB%" %%I in (*.*) do call :_process "%%I" 2
goto :eof

:_process
if %~2==1 (
set dir1=%dirA%
set dir2=%dirB%
) else (
set dir1=%dirB%
set dir2=%dirA%
)
set relpath=%~1
call set relpath=%%relpath:%dir1%=%%
if exist "%dir2%%relpath%" (
if %~2==1 (
echo N | fc /A /W /L /N "%dir1%%relpath%" "%dir2%%relpath%" > NUL 2> NUL
if errorlevel 1 echo FICHIERS DIFFERENTS %dir1%%relpath% >> compare.log
) ) else (
echo %~d1%~p1%~n1%~x1 >> effacer.log
)



"dominique" discussion : g9k6q3$oi6$
TOF wrote:
Salut

merci pour ce code mais j'ai 2 remarques:
- pourquoi il re liste l'intégralité des fichiers du dir2 en disant
qu'ils ne sont que dans dir2 à la fin dans le compare.log?
- n'est il pas possible de n'avoir que le chemin des fichiers qui sont
différents dans le compare.log?

merci par avance



Ca buggait un peu..
Ca doit être mieux.
Pour le compare.log, c'est à toi de gérer la sortie de la commande fc
comme dans ton exemple avec errorlevel...


@echo off
setlocal

if exist compare.log del compare.log

set dirA=D:dir1
set dirB=D:dir2

for /R "%dirA%" %%I in (*.*) do call :_process "%%I" 1
for /R "%dirB%" %%I in (*.*) do call :_process "%%I" 2
goto :eof

:_process
if %~2==1 (
set dir1=%dirA%
set dir2=%dirB%
) else (
set dir1=%dirB%
set dir2=%dirA%
)
set relpath=%~1
call set relpath=%%relpath:%dir1%=%%
if exist "%dir2%%relpath%" (
if %~2==1 (
fc /A /W /L /N "%dir1%%relpath%" "%dir2%%relpath%" >> compare.log
) ) else (
echo %~n1%~x1 exists only in %~d1%~p1 >> compare.log
)


TOF
Le #16706711
J'ai tout de même l'impression qu'il ne parcours pas l'arborescence
complète..

Ou bien qu'il ne comprends pas certains noms de fichiers style DW-1533E LOT
2_Compo_tour_tech_niv_+0.30_à_14.50.dwg

merci


"dominique" discussion : g9k6q3$oi6$
TOF wrote:
Salut

merci pour ce code mais j'ai 2 remarques:
- pourquoi il re liste l'intégralité des fichiers du dir2 en disant
qu'ils ne sont que dans dir2 à la fin dans le compare.log?
- n'est il pas possible de n'avoir que le chemin des fichiers qui sont
différents dans le compare.log?

merci par avance



Ca buggait un peu..
Ca doit être mieux.
Pour le compare.log, c'est à toi de gérer la sortie de la commande fc
comme dans ton exemple avec errorlevel...


@echo off
setlocal

if exist compare.log del compare.log

set dirA=D:dir1
set dirB=D:dir2

for /R "%dirA%" %%I in (*.*) do call :_process "%%I" 1
for /R "%dirB%" %%I in (*.*) do call :_process "%%I" 2
goto :eof

:_process
if %~2==1 (
set dir1=%dirA%
set dir2=%dirB%
) else (
set dir1=%dirB%
set dir2=%dirA%
)
set relpath=%~1
call set relpath=%%relpath:%dir1%=%%
if exist "%dir2%%relpath%" (
if %~2==1 (
fc /A /W /L /N "%dir1%%relpath%" "%dir2%%relpath%" >> compare.log
) ) else (
echo %~n1%~x1 exists only in %~d1%~p1 >> compare.log
)


dominique
Le #16711021
TOF wrote:
J'ai tout de même l'impression qu'il ne parcours pas l'arborescence
complète..



Il manque encore des ""

echo %~n1%~x1 exists only in %~d1%~p1
=>
echo "%~n1%~x1" exists only in "%~d1%~p1"
TOF
Le #16712891
Marche toujours pas avec les ""

J'ai une autre idée pour mon batch

est il possible de faire une comparaison de nom de dossier entre deux
chemins?

Comme ca c'est plus simple. je supprime les dossiers en trop et basta...

merci d'avance



"dominique" discussion : g9mr7l$noi$
TOF wrote:
J'ai tout de même l'impression qu'il ne parcours pas l'arborescence
complète..



Il manque encore des ""

echo %~n1%~x1 exists only in %~d1%~p1
=>
echo "%~n1%~x1" exists only in "%~d1%~p1"


Christian ASTOR
Le #16714821
On 1 sep, 11:18, "TOF"
Je cherche à comparer les fichiers de 2 repertoires (avec toute
l'arborescense) et de récuperer une liste de fichiers nouveaux ou modif iés
(conserver les +recents) avec leur chemin respectif dans un fichier txt.



Il ya divers exemples en C ou C++ sur le Web.
Par ex, en C++ : http://www.personalmicrocosms.com/Pages/dircmp.aspx
Il suffit de modifier le source pour changer éventuellement le log...
Publicité
Poster une réponse
Anonyme