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 :

recuperer chaine entre guillemets : expression reguiliere [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre émérite Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par défaut recuperer chaine entre guillemets : expression reguiliere
    bonjour ^^

    voila mon petit souci,
    j'ai une chaine de caractères sortie d'un reg /query genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ! REG.EXE VERSION 3.0
    
    HKEY_CLASSES_ROOT\Applications\firefox.exe\shell\open\command
        <SANS NOM>    REG_SZ    "C:\Program Files\Mozilla Firefox\firefox.exe" -requestPending -osint -url "%1"
    j'aimerais ne récuperer que
    1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files\Mozilla Firefox\firefox.exe
    voir meme :

    2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Program Files\Mozilla Firefox\
    mais pour passer de 1 à 2 je pense savoir comment faire ^^
    qq aurait une idée ?

  2. #2
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Salut,

    Tu filtres ta sortie reg par un find, et tu fais traiter ton résultat par une boucle for avec la substitution de référence qui va bien (cf for /?)

  3. #3
    Membre émérite Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par défaut
    @minnesota : merci de ta participation.
    Tu filtres ta sortie reg par un find, et tu fais traiter ton résultat par une boucle for(...)
    jusque là aucun problème ^^
    avec la substitution de référence qui va bien
    c'est là que ça coince... je doit avoué ne pas etre tres doué avec les expressions regulières et la manipulation de chaine !

    je me doute que ça doit tirer vers un truc comme ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FOR /F tokens=1* delims=" %i in (monfich.txt) do @echo %i
    mais bon ça ne marche pas :/

  4. #4
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par gretch Voir le message
    jusque là aucun problème ^^
    Je veux bien mais il est où le "find" alors ?

    Pour ton dernier point -> http://www.developpez.net/forums/d11...ine-caractere/

  5. #5
    Membre émérite Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par défaut
    Dsl, je te met le script au complet ça peut etre plus simple à comprendre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @echo off
    set tmpfile="%cd%\test.txt"
    reg query HKEY_CLASSES_ROOT\Applications\firefox.exe\shell\open\command>%tmpfile%
    
    findstr "Firefox" %tmpfile%
    REM FOR /F tokens=1 delims=\" %i in (%tmpfile%) do @echo %i 
    pause
    voila en gros ce que j'ai jusque là.
    c'est clairement le FOR qui déconne...
    je n'arrive pas à isoler la chaine à l’intérieur des guillemets.

  6. #6
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=4" %%i in ('reg query hkcr\applications\firefox.exe\shell\open\command /ve ^| find /i "reg_sz"') do echo %%~dpi

  7. #7
    Membre émérite Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=4" %%i in ('reg query hkcr\applications\firefox.exe\shell\open\command /ve ^| find /i "reg_sz"') do echo %%~dpi
    dsl marche pas...

    en revanche je viens de trouver qq chose de tres proche de mon besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    set TEXT=Foo: Lorem Ipsum 'The quick brown fox' Bar 
    @echo %TEXT% 
    for /f "tokens=2 delims=^'" %%A in ("abc%TEXT%xyz") do ( 
        set SUBSTR=%%A 
    ) 
    @echo %SUBSTR%
    il reste plus qu'à remplacer les ' par des "
    saurait tu faire ça ? (bien entendu j'ai essayer naïvement mais cela n'a pas marché )
    c'est la partie : delims=^' qui me pose problème :/ je voudrais que ce soit delims=^" mais il 'en veux pas

  8. #8
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Tu l'as utilisé depuis un script ou la ligne de commande ? Car c'est pas pareil.

    Dans un script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=4" %%i in ('reg query hkcr\applications\firefox.exe\shell\open\command /ve ^| find /i "reg_sz"') do echo %%~dpi
    et depuis la ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for /f "tokens=4" %i in ('reg query hkcr\applications\firefox.exe\shell\open\command /ve ^| find /i "reg_sz"') do echo %~dpi
    Citation Envoyé par gretch Voir le message
    en revanche je viens de trouver qq chose de tres proche de mon besoin ...

    y veut rien dire ton truc

  9. #9
    Membre émérite Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par défaut
    en script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @echo off
    for /f "tokens=4" %%i in ('reg query hkcr\applications\firefox.exe\shell\open\command /ve ^| find /i "reg_sz"') do echo %%~dpi
    lorsque je lance ceci, il m'affiche le chemin d'execution du script.

    en revanche je viens de trouver qq chose de tres proche de mon besoin ...

    y veut rien dire ton truc
    tu parle de ma phrase ou du bout de code ?
    si c'est de ma phrase, j'entend par là que ce bout de code fait ce que je veux sauf qu'il marche avec des quotes ( ' ), mon problème c'est les doubles quotes ( " ) visiblement le caractère d'echapement ^ ne fonctionne pas avec les doubles quotes :/

  10. #10
    Membre Expert
    Inscrit en
    Avril 2010
    Messages
    1 495
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 1 495
    Par défaut
    Citation Envoyé par gretch Voir le message
    lorsque je lance ceci, il m'affiche le chemin d'execution du script.
    À oui désolé, j'avais zappé les espaces potentiels dans le chemin
    Je regarde ce que je peux faire, quitte pas

    Edit:

    Regarde si ça te convient.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for /f "tokens=3*" %%i in ('reg query hkcr\applications\firefox.exe\shell\open\command /ve ^| find /i "reg_sz"') do call :loadFirefoxDir %%j
    echo.%FirefoxDir%
    goto :eof
    
    :loadFirefoxDir
    set FirefoxDir=%~dp1
    goto :eof

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 29
    Par défaut
    En relisant mieux, ca ne correspond finalement à ce que tu voulais, désolé

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

    Dans l'aide de la commande FOR, il y a tout une partie qui permet de travailler sur les noms de fichier/dossier avec entre autre la suppression des ""

    De plus, la substitution de références de variables FOR a été améliorée.
    Vous pouvez maintenant utiliser la syntaxe optionnelle suivante*:

    %~I - étend %I en supprimant les guillemets (")
    %~fI - étend %I en nom de chemin d'accès reconnu
    %~dI - étend %I en lettre de lecteur uniquement
    %~pI - étend %I en chemin d'accès uniquement
    %~nI - étend %I en nom de fichier uniquement
    %~xI - étend %I en extension de fichier uniquement
    %~sI - chemin étendu contenant uniquement des noms courts
    %~aI - étend %I en attributs du fichier
    %~tI - étend %I en date/heure du fichier
    %~zI - étend %I en taille du fichier
    %~$PATH:I - parcourt les répertoires de la variable
    d'environnement PATH et étend %I en nom du
    premier fichier reconnu trouvé. Si le nom de la
    variable d'environnement n'est pas défini ou
    que le fichier n'est pas trouvé par la recherche,
    alors ce modificateur étend en chaîne vide

    Vous pouvez combiner les modificateurs pour obtenir des résultats composés*:

    %~dpI - étend %I en lettre de lecteur et chemin d'accès uniquement
    %~nxI - étend %I en nom de fichier et extension uniquement
    %~fsI - étend %I en nom de chemin complet avec noms courts
    uniquement
    %~dp$PATH:i - parcourt les répertoires listés dans la variable
    d'environnement PATH à la recherche de %I et étend
    en lettre de lecteur du premier trouvé.
    %~ftzaI - étend %I en DIR comme ligne en sortie

    Dans les exemples ci-dessus %I et PATH peuvent être remplacés par d'autres
    valeurs valides. La syntaxe %~ se termine par un nom de variable FOR valide.
    Le choix de noms de variables en majuscules comme %I facilite la lecture
    et empêche toute confusion avec les modificateurs qui ne tiennent pas compte
    de la casse.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 15
    Par défaut
    Citation Envoyé par gretch Voir le message
    j'aimerais ne récuperer que
    1 :

    voir meme :

    2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
    C:\Program Files\Internet Explorer\IEXPLORE.EXE
    C:\Program Files\Internet Explorer\
    script testé uniquement sous Microsoft Windows XP avec le seul navigateur supporté officiellement par l'éditeur.
    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
    16
    17
    18
    @echo off &SETLOCAL ENABLEEXTENSIONS
    set key=HKEY_CLASSES_ROOT\Applications\iexplore.exe\shell\open\command
    :# delims is a TAB followed by a space
    FOR /F "tokens=3* delims=	 " %%A IN ('reg query %key% /ve 2^>nul ^|find /i "_SZ"') do set data=%%B
    if "_"=="_%data%" echo/[data not set] &goto :eof
    SET data=%data:"=#% &call :__loop #
    :__final
    SET data=%data:#="%
    echo/%data%
    set data=%data:"=%
    echo/%data%
    call :__loop \
    echo/%data%
    goto :eof
    :__loop
    IF "%data:~-1%" NEQ "%1" SET "data=%data:~0,-1%" &goto :__loop
    goto :eof
    + de tutoriaux et exemples ici

  13. #13
    Membre émérite Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par défaut
    @all : Merci de m'aider vraiment cool ^^

    @Raviac : c'est pas tant d'enlever les guillement qui m'embetais le plus c'etait de ne garder que leurs contenu :/

    @Bilou_Gateux : Merci c'est presque ça !!! j'ai changé 2 points histoire d'avoir exactement ce que je voulais ^^ :

    1. J'ai augmenter le token de la boucle de 3* à 4* pour ne pas récupérer le << REG_SZ >>
    2. J'ai rajouté : set %data%=%%~dpdata histoire de ne récupérer ni le nom de fichier ni les arguments derriere (ça marchait bien sur IE car pas d'arguments mais pour FF ma ligne continuait ^^)

    En tout cas merci pour tout !
    je vous met le code définitif si dessous ^^

    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
    16
    17
    18
    19
    20
    @echo off &SETLOCAL ENABLEEXTENSIONS
    set key=hkcr\applications\firefox.exe\shell\open\command
    :# delims is a TAB followed by a space
    FOR /F "tokens=4* delims=     " %%A IN ('reg query %key% /ve 2^>nul ^|find /i "_SZ"') do set data=%%B
    if "_"=="_%data%" echo/[data not set] &goto :eof
    SET data=%data:"=#% &call :__loop #
    :__final
    SET data=%data:#="%
    echo/%data%
    set data=%data:"=%
    echo/%data%
    call :__loop \
    echo/%data% 
    set %data%=%%~dpdata
    
    pause
    goto :eof
    :__loop
    IF "%data:~-1%" NEQ "%1" SET "data=%data:~0,-1%" &goto :__loop
    goto :eof

  14. #14
    Membre émérite Avatar de gretch
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2006
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 165
    Par défaut
    Citation Envoyé par Bilou_Gateux
    + de tutoriaux et exemples ici
    Merci ça à l'air trés bien ^^

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

Discussions similaires

  1. Regex : récuperer une chaine entre deux guillemets anglais(")
    Par Phonatacid dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 01/06/2011, 12h02
  2. explode par espace sauf chaine entre guillemet
    Par calitom dans le forum Langage
    Réponses: 3
    Dernier message: 12/02/2010, 16h48
  3. Extraire une chaine entre guillemets
    Par grenouille2008 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 01/07/2008, 17h40
  4. recuperer toute les chaine entre a et b
    Par bailamos dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 21/02/2008, 00h02
  5. Réponses: 4
    Dernier message: 29/05/2006, 16h27

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