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 :

transformation d'une ligne de caractères


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut transformation d'une ligne de caractères
    Salut à tous,

    J'aimerais un petit coup de pouce à la construction d'une fonction d'un de mes scripts.Il s'agit en fait de pouvoir recuperé le chemin de 5 outils nécéssaire à l'execution d'autre script en ANT.

    La piste que j'ai envisagé est :
    1/ créer une boucle FOR qui recherche le nom d'un fichier unique permettant d'identifier à coup sur le dossier de l'outils recherché.
    2/stocker le résultat dans un fichier ou une variable.
    3/supprimer du fichier ou de la variable les fin de caractères qui correspondent au fichier pour ne garder que le chemin du dossier.

    --------------------------------------------------------------------------

    J'ai déjà une boucle qui me trouve le fichier que je souhaite qui est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    echo ----recherche de ANT----
    set Liste=C
    for %%a in (%Liste%) do for /f "delims=" %%b in ('dir /s /b /ad "%%a:\" 2^>NUL ^| findstr /i "apache-ant-1.7.1"') do (
    set ANT=%%b
    goto sortie1
    )
    :sortie1
    echo ANT a ete trouve a cette adresse :      %ANT%
    La ou je bloque c'est que je n'arrive pas à supprimer les caractères en trop qui correspondent au fichier dans le chemin obtenu par ma boucle.


    Pourriez-vous m'aider en ce sens ?


    Merci à tous,

  2. #2
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    salut,

    Utilises «set ANT=%%~dpsb» en lieu et place de «set ANT=%%b».
    Cependant, tu dois agrémenter ton code de «tokens» (2nd for) et de «errorlevel» (findstr) pour espérer une certaine fiabilité. De même, tu dois reconsidérer les paramètres de ta commande «dir» où tu sembles ne lister que des répertoires alors que tu cherches vraisemblablement un fichier. Voilà pour mes constatations après un rapide survol de ton code.

    Bonne continuation.

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    oui je me suis trompé dans ma commande dir auquel il faut mettre l'option /a-d pour trouver un fichier precis.

    que veux tu dire exactement par cette variable : «set ANT=%%~dpsb»
    Pourquoi le tilde et pourquoi ce nom ?

    Sinon j'ai trouvé une autre piste qui me permet de trouver ma liste rechercher avec les tokens de separation mais j'ai plusieurs résultat a la ligne et comme mon nombre de tokens varie, je ne vois pas comment lui dire de supprimer les caractères après un nombre de tokens variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for %%a in (%Liste%) do for /F "tokens=1,2,3,4,5 delims=\" %%a in ('dir /s /b /a-d "%%a:\" 2^>NUL ^| findstr /i "ant.cmd"') do ( echo %%a %%b %%c %%d %%e)
    j'ai lu quelques part qu'on pouvait intégrer du VBscript dans un batch.
    Peut être est ce une piste pour développer quelques chose de plus technique.
    est ce vrai ? si oui, est ce un langage abordable rapidement ?

  4. #4
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Salut,

    Vu la journée qui m'attend, je ne peux m'étaler trop sur le sujet ni même aborder à cet instant la question du VBscript.
    Toutefois, dans l'hypothèse où tu consultes la discussion en matinée, je te fournis le nécessaire pour que tu puisses aller de l'avant.

    Ainsi en ce qui concerne les lettres qui t'intriguent, saches que ce sont des modificateurs de variables. Tu en as une explication dans l'aide en ligne de la commande for (for /?), somme toute assez sommaire, mais tu peux utilement t'y référer.

    Ainsi, la composition «~dps» permet de récupérer le chemin absolu du dossier conteneur au format 8.3

    Voici en vrac deux exemples qui te seront peut-être plus parlants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for /f "tokens=*" %%i in ('dir /s /b /a-d c:\unique.txt') do echo %%i
    exemple de résultat affiché: c:\dossier\sousdossier\unique.txt
    
    for /f "tokens=*" %%i in ('dir /s /b /a-d c:\unique.txt') do echo %%~dpsi
    résultat affiché: c:\dossier\sousdossier\
    Maintenant, comme "apache-ant-1.7.1" est un package logiciel, je me demande s'il ne serait pas mieux pour toi de récupérer le chemin depuis la base de registre plutôt que de parcourir les disques. Dans ce cas, la commande «reg» pourrait t'être utile.

    Merci pour ta participation au sondage et bon courage pour la suite.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Points : 305
    Points
    305
    Par défaut
    merci pour cette réponse très intéressante maxim_um.

    J'ai cru trouvé la solution à mon problème mais en fait il n'est apparemment pas possible de passer de, chemin DOS en chemin 32bits.
    Il me trouve des chemins non pas superflus mais différent de la logique que j'attendais.

    Il me trouve les fichiers demandés mais dans des sous sous dossier d'autres programmes.

    Sinon j'ai cherché du coté de la commande reg mais je ne vois pas trop en quoi elle pourrait m'aider puisque il me faudrait des clés ou sinon l'inverse c'est à dire que je ne peux obtenir que des clés et non pas des valeurs comme un chemin.

    je vais quand même me renseigner d'avantage sur cette piste car ça me parait la solution idéal pour obtenir le chemin d'un logiciel.

  6. #6
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Tu as vraisemblablement une préférence pour le format Long File Name (LFN) que tu trouves plus logique. Pour l'utiliser, il te suffit de remplacer les modificateurs «dps» par «dp» dans les exemples cités plus haut. (conf. for /?)

    Si tu as installé le package en question, tu dois être en mesure de faire une recherche dans la base de registre. Le but serait d'identifier un couple clef/ valeur que tu transmettras à «reg» pour qu'il te retourne la donnée correspondante, celle qui contient le chemin du programme.

    Tu peux également regarder du côté des services Windows concernés et des variables d'environnements («set»), eux aussi peuvent contenir le chemin recherché.

Discussions similaires

  1. [Débutant] Transformation d'une chaine de caractères en fonction
    Par safizounet dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 27/01/2009, 17h08
  2. Lire une ligne de caractères et de doubles avec sscanf
    Par colinou dans le forum Débuter
    Réponses: 4
    Dernier message: 16/03/2008, 20h46
  3. Comparaison d'une ligne de caractères
    Par zennn dans le forum Débuter
    Réponses: 10
    Dernier message: 26/06/2007, 23h38
  4. Réponses: 3
    Dernier message: 08/02/2007, 11h55
  5. Réponses: 7
    Dernier message: 28/03/2006, 11h24

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