Chercher deux fichiers dans répertoires différents et variabiliser la résultat

Résolu
Ka-El Messages postés 279 Statut Membre -  
barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Me voici de nouveau avec mes problématiques de batch...
J'ai l'impression d'être encore devant un cas insurmontable. Alors j'espère que vous allez pouvoir m'aider.

Voilà actuellement je cherche les 2 fichiers suivants:
~/bin/toto.bat
~/runtime/toto.bat

Comme dans mon exemple, les deux fichiers portent toujours le même nom et sont toujours situés dans les sous-dossiers "bin" et "runtime"
Mon problème, c'est que les arborescences peuvent être alléatoires. Exemple :
C:\bateau\maison\bin\toto.bat
ou
C:\cherche\tu\trouveras\bin\toto.bat
ou
D:\alors\tu\trouves\runtime\toto.bat (Ah oui, les fichiers peuvent aussi être situés sur le disque C: ou D:)
ou
C:\cest\pas\facile\hein\runtime\toto.bat
etc...

Et pour corser le tout, il faut que le code variabilise les deux résultats qui seront trouvés:
exemple:
echo %resultat1%
C:\cherche\tu\trouveras\bin\toto.bat
echo %resultat2%
D:\cest\pas\facile\hein\runtime\toto.bat

Pas simple non ?
En tout cas, moi je patine...
je compte sur vous :-)
Ka-El

3 réponses

  1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929
     
    Salut,

    Facile à faire mais faut pas être pressé, surtout si tu as une grosse arborescence :

    @echo off
    Setlocal EnableExtensions DisableDelayedExpansion
    chcp 28591 >nul

    call :recherche "toto.bat" resultat1
    call :recherche "titi.bat" resultat2

    echo. & echo Resultat1 = %resultat1%
    echo. & echo Resultat2 = %resultat2%

    echo. & pause
    exit

    :recherche

    for %%A in (C,D) do (

    %%A:
    for /f "delims=" %%J in ('2^>nul dir /b /a-d /s %1') do set %2=%%J

    )

    goto :eof

    Le fait que les fichiers se trouvent à chaque fois dans bin et runtime est anecdotique, ça ne nous aide en rien.
    0
    1. Ka-El Messages postés 279 Statut Membre
       
      Salut Barnabe,
      Toujours aussi efficace à ce que je vois ! :-)

      Ceci dit, tu as omis un détail important dans ton code:
      Les deux fichiers ont, en effet, le même nom ("toto.bat") et les seuls qui m'intéressent sont situé dans les sous-dossiers ~/bin et ~/runtime
      Je précise les dossiers, car il peut très bien y avoir d'autres fichiers "toto.bat" sur mon serveur mais dans d'autres répertoires (et qui donc ne m'intéressent pas)

      Tu as une idée ?
      @+
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929 > Ka-El Messages postés 279 Statut Membre
         
        Ah ok, donc ce n'est pas si anecdotique que ça finalement ;)

        Je vais voir ce qu'on peut faire.
        0
  2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929
     
    Voilà la nouvelle version :
    @echo off
    Setlocal EnableExtensions EnableDelayedExpansion
    chcp 28591 >nul

    set cible=toto.bat

    for %%A in (C,D) do (

    %%A:

    for /f "delims=" %%J in ('2^>nul dir /b /a-d /s "%cible%"') do (

    (echo %%~pnxJ | findstr "bin\\%cible%" >nul) && set resultat1=%%J
    (echo %%~pnxJ | findstr "runtime\\%cible%" >nul) && set resultat2=%%J

    )
    )

    echo. & echo Resultat1 = !resultat1!
    echo. & echo Resultat2 = !resultat2!

    echo. & pause
    exit

    0
    1. Ka-El Messages postés 279 Statut Membre
       
      Merci pour ton implication Barnabe ;-)
      Effectivement je suis conscient que ma demande est un peu tordue...
      D'ailleurs, de mon côté le script ne fonctionne pas.
      ça marche pour toi ?

      En passant, peux -tu stp me dire à quoi sert la ligne suivante ?:
      chcp 28591 >nul

      Merci encore
      0
    2. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929 > Ka-El Messages postés 279 Statut Membre
       
      Cette commande modifie le codepage, elle est généralement utilisée pour afficher correctement les caractères accentués.

      Si le script ne fonctionne pas, à mon avis ça provient du filtre de la commande FINDSTR.

      En effet il y a une bizarrerie dans ta demande : les arborescences windows utilisent le \ tandis que les arborescences GNU/Linux utilisent le / . Ce script est un script windows mais toi tu cherches une arborescence Linux, je ne comprends pas très bien.
      0
    3. Ka-El Messages postés 279 Statut Membre
       
      Tu as raison nous sommes bien sur du "\"
      Ma demande initiale était correcte mais pas ma réponse qui a suivi (c'est mon côté étourdi ça !)

      En fait, de mon côté quand je lance ton script, la recherche a l'air de bien se faire mais celle-ci n'affiche au final aucun résultat (alors que j'ai bien mes deux fichiers toto.bat dans les arborescences ~\bin et ~\runtime)

      Est-ce que ton script est fonctionnel dans n'importe quel emplacement du serveur ?
      0
    4. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929 > Ka-El Messages postés 279 Statut Membre
       
      Ok pour le \ le script devrait donc fonctionner.

      Le script cherche dans C: et D: comme demandé initialement, il peut être lancé de n'importe quel endroit.
      0
    5. Ka-El Messages postés 279 Statut Membre
       
      J'ai refait l'essai, mais je confirme ça ne marche pas:


      De ton côté, c'est OK ?

      Actuellement les deux fichiers toto.bat recherchés sont sous:
      C:\TRI\Crossfic_TRI\runtime
      C:\entreprise\bck_dowload\bin

      merci ! :-)
      0
  3. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929
     
    Voilà la correction du problème :
    @echo off
    Setlocal EnableExtensions EnableDelayedExpansion
    chcp 28591 >nul

    set cible=toto.bat

    for %%A in (C,D) do (

    echo %CD% | find /i "%%A:" && cd\ || %%A:

    for /f "delims=" %%J in ('2^>nul dir /b /a-d /s "%cible%"') do (

    (echo %%~pnxJ | findstr /i "bin\\%cible%" >nul) && set resultat1=%%J
    (echo %%~pnxJ | findstr /i "runtime\\%cible%" >nul) && set resultat2=%%J

    )
    )

    echo. & echo Resultat1 = !resultat1!
    echo. & echo Resultat2 = !resultat2!

    echo. & pause
    exit

    J'espère que c'est bon cette fois-ci.

    Le problème vient de la commande pour changer de disque (C: ou D:), en fait si on se trouve déjà sur C: mais qu'on veut remonter à la racine, la commande C: n'a aucun effet il faut utiliser cd\ à la place.

    0
    1. Ka-El Messages postés 279 Statut Membre
       
      Ah ouais ! c'est bien mieux :-)
      Par contre, (je vais être un peu chiant), sais-tu pourquoi quand on lance le programme, on a la ligne "C:\Windows\system32" qui s'affiche en haut de la fenêtre de recherche ?

      Sinon, c'est nickel.
      J'apprécie beaucoup ton aide. Encore merci ! :-)
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929 > Ka-El Messages postés 279 Statut Membre
         
        Voilà une correction :

        @echo off
        Setlocal EnableExtensions EnableDelayedExpansion
        chcp 28591 >nul

        set cible=toto.bat

        for %%A in (C,D) do (

        (echo %CD% | find /i "%%A:" >nul) && cd\ || %%A:

        for /f "delims=" %%J in ('2^>nul dir /b /a-d /s "%cible%"') do (

        (echo %%~pnxJ | findstr /i "bin\\%cible%" >nul) && set resultat1=%%J
        (echo %%~pnxJ | findstr /i "runtime\\%cible%" >nul) && set resultat2=%%J

        )
        )

        echo. & echo Resultat1 = !resultat1!
        echo. & echo Resultat2 = !resultat2!

        echo. & pause
        exit
        0
    2. Ka-El Messages postés 279 Statut Membre
       
      Ah bizarre, il me semblait que je n'avais pas cette ligne précédemment.
      En tout cas, encore merci.
      Bon week-end et peut être à bientôt pour de nouvelles aventures ;-)
      0
      1. barnabe0057 Messages postés 14329 Date d'inscription   Statut Contributeur Dernière intervention   4 929 > Ka-El Messages postés 279 Statut Membre
         
        Merci bon week-end également !

        A bientôt.
        0