IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Comparaison entre deux dossiers


Sujet :

Scripts/Batch

  1. #1
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut Comparaison entre deux dossiers
    Bonjour à tous,

    Je cherche à comparer le contenu de deux dossiers en listant les fichiers qui ne se trouvent pas dans ces deux dossiers (ceux qui ne sont pas en doublons, donc). Ces dossiers sont très volumineux, d'où le fait que je n'ai guère envie de chercher par moi-même les fichiers différents. J'ai cherché et trouvé un script que j'ai d'abord essayé sur deux dossiers de test (et de petite taille), et qui marche impeccablement bien :

    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    @echo OFF
    setlocal
     
    if exist compare.log del compare.log
    if exist effacer.log del effacer.log
     
    set dirA=C:\Users\Documents\DOSSIER TEST\T1
    set dirB=C:\Users\Documents\DOSSIER TEST\T2
     
    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
    )

    Problème, lorsque je lance le script sur l'ordinateur où se trouve les deux dossiers volumineux (oui, c'est une autre machine que celle sur laquelle je travaille), et bien ça ne marche plus. L'invite de commande s'ouvre bien pour quelques secondes (il y a même un fc.exe qui apparaît brièvement dans la liste des processus), mais le fichier log censé lister les différences entre les deux dossiers n’apparaît jamais, il n'est tout simplement pas créé. Je n'ai pourtant rien changé au script entre les deux machines, si ce n'est bien sur les chemins des répertoires à comparer.

    Une idée de ce qu'il se passe ? Merci d'avance pour votre aide !

  2. #2
    Membre émérite Avatar de devilsnake88
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Janvier 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2013
    Messages : 453
    Par défaut
    Bonjour,
    Est-ce le script complet que vous nous avez donné?

    Je n'ai pas testé mais que donne ceci:
    Code bat : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    @echo OFF & cls
    setlocal
     
    set "rep_log=C:\Logs"
    if not exist "%rep_log%\" md "%rep_log%\"
    if exist "%rep_log%\compare.log" del "%rep_log%\compare.log"
    if exist "%rep_log%\effacer.log" del "%rep_log%\effacer.log"
     
    set "dirA=C:\Users\Documents\DOSSIER TEST\T1"
    set "dirB=C:\Users\Documents\DOSSIER TEST\T2"
     
    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% >> "%rep_log%\compare.log"
        )
    ) else (
        echo %~d1%~p1%~n1%~x1 >> "%rep_log%\effacer.log"
    )
    exit

  3. #3
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Bonjour, et merci pour la réponse

    J'ai bien mis tout le script. En revanche, pour celui qui vous m'avez donné, il ne marche pas non plus sur mes dossiers de test : aucuns fichiers log n'est créé, alors qu'il y a bien des différences entre les deux dossiers (un fichier et un sous dossier en plus dans "T2" en comparaison de "T1").

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    Es-tu sûr que les chemins sont identiques sur les 2 machines ?


  5. #5
    Membre confirmé
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Par défaut
    Ah, si seulement ça pouvait être ça ! Malheureusement, j'ai bien fait attention à changer les chemins dans le script utilisé sur la deuxième machine, d'où le fait que je ne comprends vraiment pas ce qui se passe. L'invite de commande s'ouvre d'ailleurs pour un plus long moment sur cette machine, les dossiers à étant assez volumineux, en comparaison de mes dossiers de test où il n'y a que quelques fichiers. Il se passe donc bien quelque chose, mais impossible de savoir quoi vu que le fichier log n’apparaît pas

Discussions similaires

  1. Comparaison entre deux chaînes
    Par fifi87 dans le forum Assembleur
    Réponses: 2
    Dernier message: 12/12/2006, 20h55
  2. Comparaison entre deux variables
    Par delavega dans le forum ASP
    Réponses: 8
    Dernier message: 23/11/2006, 16h42
  3. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16
  4. Réponses: 6
    Dernier message: 18/04/2006, 13h11
  5. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 20h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo