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 :

Recherche d'un path absolu á partir d'un nom de dossier [Batch]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Par défaut Recherche d'un path absolu á partir d'un nom de dossier
    Bonjour a tous,

    Voila je ne suis vraiment pas excellent en script batch et j'aurai besoin de votre aide...
    Dans un script batch, l'utilisateur passe en parametre (%1) un nom de dossier.
    Je me position dans une arborescence (du type C:\Temp\Test\) et celle ci contient divers dossiers, sous-dossiers, sous-sous dossiers ,etc.

    Ainsai j'aimerai faire une recherche de ce dossier, au sein de cette arborescence totale, sachant que le nom peut etre legerement different (miniscule/majuscule; une lettre en plus ou en moins) - je ne sais pas s'il existe en batch l'équivalent d'un 'LIKE' en sql - et que le script écrase la valeur de %1 par le path absolu oú se situe le dossier.
    Dans ce cas, si %1 = MyFolder, je voudrais que %1 soit remplacé par qq chose du type:
    C:\Temp\Test\Dossier1\Sous-dossier1\sous-sous-Dossier1\MyFolder

    Est-ce possible?Simple?

    Merci pour votre aide,

  2. #2
    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 oriente toi sur qqe chose comme ça :

    Place le bat dans le dossier racine d'où dois commencer la recherche (C:\Temp\Test\ dans ton exemple)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off&cls
    set $path=Rien trouv‚
    
    for /f "delims=" %%a in ('dir /ad/b/s ^| findstr /i "%1"') do set $path=%%a
    
    echo %$path%
    Le problème avec ce genre de recherche est que si tu as une lettre en moins
    et qu'il y a plusieurs occurences de Myfolder tu va récuperer la dernière.

    Exemple :

    ton string de recherche est : Myfolder et il existe myfolder1 et myfolder2
    le résultat en retour sera myfolder2.

    Inversement si tu recherches Myfolder5 tu ne trouveras rien.

    Donc à utiliser vraiment avec précaution.

    Maintenant tu peux appliquer une batterie de filtres et test sur cette variable en sortie selon ton problème.


  3. #3
    Membre averti
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Par défaut
    Merci beaucoup.
    J'ai lancé ce batch et il ré pond cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    find: unable to access "/i": The system cannot find the file specified.
    find: unable to access "MyFolder": The system cannot find the file specified.
    Juste pour confirmer 'MyFolder' existe et s'ecrit bien comme ça.
    En ce qui concerne les limitations que tu m'as expliqué, je te remercie pour m'avertir, cependant (et heureusement) c'est un cas qui n'arrivera pas!

    Merci bcp!

  4. #4
    Membre averti
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Par défaut
    Bon a vrai dire je pense avoir résolu ce pb en ajoutant un '.' apres le 'find':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @echo off &cls
    set $recherche=%1
    
    for /f "delims=" %%a in ('dir /ad/b/s ^| find . /i "%$recherche%" ') do (if %errorlevel%==0 echo $Path=%%~dpna)
    
    echo %$Path
    Cependant, il devrait me retourner un path unique.
    Or il me retourne une liste enorme de path, a tel point que je suis obligé d'arreter le script.

    Voici mon arborescence de test (réduite):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    -C
      -Temp
        -Test --> Positionne le .bat a cet endroit avec en parametre B2
          -Project1
            -A1
              -voiture
            -B2
              -avion
            -C3
              -bus
            -D4
              -train
          -Project2
          -Project3
    Et il me retourne:
    $Path=C:\Temp\Test
    $Path=C:\Temp\Test\Project1\
    $Path=C:\Temp\Test\Project1\A1
    $Path=C:\Temp\Test\Project1\A1\voiture
    $Path=C:\Temp\Test\Project1\B2
    $Path=C:\Temp\Test\Project1\B2\avion
    $Path=C:\Temp\Test\Project1\C3
    $Path=C:\Temp\Test\Project1\C3\bus
    $Path=C:\Temp\Test\Project1\D4
    $Path=C:\Temp\Test\Project1\D4\train
    $Path=C:\Temp\Test\Project2
    $Path=C:\Temp\Test\Project3

    Bref, tous les path possibles a apartir de la ou je suis...
    Peut etre que finalement le . aprés le find n'est pas la bonne solution pour résoudre ce probleme...

    Merci pour votre aide,

  5. #5
    Membre averti
    Inscrit en
    Août 2008
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 62
    Par défaut
    Bonsoir a tous,

    Bon je viens de modifier le script afin de ne plus avoir l'erreur du find et de ne plus avoir des centaines de resultats.
    Voici ce que j'ai changé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @echo off &cls
    set $recherche=%1
    
    SET SYS32_HOME=%SystemRoot%\System32
    SET FIND_CMD=%SYS32_HOME%\find.exe
    
    for /f "delims=" %%a in ('dir /ad/b/s ^| "%FIND_CMD%" /i "%$recherche%" ') do (if %errorlevel%==0 set $Path=%%~dpna)
    
    echo %$Path%
    En reprenant mon exemple d'arborescence:

    Il me retourne maintenant le path correct jusqu'a mon parametre %1.

    C'est parfait!

    Cependant, une derniere petite question, comment puis-je faire pour ajouter un critere en plus a ma recherche...?
    En gros, reprenant un exemple d'arborescence:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    -C:
      -Temp
        -Test --> Positionne le .bat a cet endroit avec en parametre B2
          -Project1
            -A1
              -voiture
            -B2
              -avion
            -C3
              -bus
            -D4
              -train
          -Project2
            -B2
          -Project3
    En gros je voudrais passer en parametre B2 et Project1, afin qu'il ne prenne pas en compte le edossier B2 au sein de Project2...
    Est ce possible?

    Merci pour votre aide,

  6. #6
    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,

    En fait j'ai corrigé mon premier code il y avait effectivement des erreurs qui sont donc corrigé et j'ai encore simplifié le code.

    Pour ton second problèmes en fait tu veux faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    @echo off&cls
    set $path=Rien trouv‚
    
    for /f "delims=" %%a in ('dir /ad/b/s ^| findstr /i "%1" ^| findstr /i "%2"') do set $path=%%a
    
    echo %$path%
    Si tu mets comme argument b2 project1 il va te ressortir seulement le b2 de project1.

    Voilà


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche d'une valeur entière à partir de décimaux
    Par Swiper dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/07/2007, 15h56
  2. Réponses: 6
    Dernier message: 28/06/2007, 11h17
  3. Réponses: 3
    Dernier message: 17/04/2007, 15h58
  4. Recherche d'un path d'application
    Par alaincnes dans le forum Langage
    Réponses: 1
    Dernier message: 19/01/2007, 14h24
  5. Réponses: 2
    Dernier message: 20/07/2006, 11h10

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