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 :

Echapper % lorsqu'il est déjà échapper! [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut Echapper % lorsqu'il est déjà échapper!
    Bonjour,

    j'ai une boucle for avec une commande wmic qui contient des caractères échappées, je souhaiterais remplacer automatiquement test.bat par le nom du script contenu dans une variable.
    MERCI

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for /f "delims=" %%a in ( 'wmic process where "CommandLine like '%%test.bat%%'"' ) do set /a COUNT+=1

  2. #2
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 840
    Points : 9 225
    Points
    9 225
    Par défaut

    Je crois, que j'ai déjà rencontré ce genre de problème avant, mais j'ai oublié ou exactement !
    Bref, pouvez-vous m'envoyer le code en entier pour faire des tests chez moi.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut
    Oui, le script permet de recherché s'il y a déjà une instance en cours d'éxécution et il ferme la fenêtre de la 2 eme instance si elle existe.

    monTest.bat
    Code batch : 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
     
    @echo off
    chcp 28591 > nul
     
    title %~nx0 Script & Color 1A
     
    setlocal enableextensions enabledelayedexpansion
     
     
    REM Contrôle que le script ne soit pas déjà en cours d'éxécution
    set /a COUNT=-4
    for /f "delims=" %%a in ( 'wmic process where "CommandLine like '%%monTest.bat%%'"' ) do set /a COUNT=!COUNT!+1
     
    if !COUNT! GTR 1 (
    	echo "- Le script %~nx0 à été éxécuter, qu'alors une autre instance existe" >> info.log
    	exit
    )
     
    echo Première instance du scipt monTest.bat
    pause
     
    exit

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut
    Bon hé bien c'est résolu, il fallait en mettre %%% du coup, je croyais avoir fait le test et je croyais que cela avait échoué...Mais cela fonctionne...

    Code batch : 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
     
    @echo off
    chcp 28591 > nul
     
    title %~nx0 Script & Color 1A
     
    setlocal enableextensions enabledelayedexpansion
     
    set scriptName=%~nx0
    echo %scriptName%
     
    REM Contrôle que le script ne soit pas déjà en cours d'éxécution
    set /a COUNT=-4
    for /f "delims=" %%a in ( 'wmic process where "CommandLine like '%%%scriptName%%%'"' ) do set /a COUNT=!COUNT!+1
     
    if !COUNT! GTR 1 (
    	echo "- Le script %~nx0 à été éxécuter, qu'alors une autre instance existe" >> info.log
    	exit
    )
     
    echo Première instance du scipt monTest.bat
    pause
     
    exit

  5. #5
    Membre chevronné
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Points : 1 991
    Points
    1 991
    Par défaut
    salem

    pourquoi mettre 3 et pas 4 ou 5 ? en mode batch le parseur quand il rencontre le caractère '%' il va chercher au debut s'il s'agit d'un paramètre si non il va chercher s'il s'agit d'une variable car c'est un caractère reservé en mode batch.

    Code batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    C:\Users\walid\Desktop>type foo.cmd
    @echo off
    echo %1bar%
    C:\Users\walid\Desktop>set 1bar=param
     
    C:\Users\walid\Desktop>foo.cmd
    bar
     
    C:\Users\walid\Desktop>foo.cmd foo
    foobar
     
    C:\Users\walid\Desktop>



    s'il ne s'agit pas de variable alors il y 'a tout un mécanisme qui se déclenche d'echappement de '%'. il faut juste savoir que chaque '%' échappe le suivant sauf s'il s'agit d'un seul '%' et si le nombre de %' est paire alors le dernier '%' est ignoré:

    Code batch : 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
     
    C:\Users\walid\Desktop>type foo.cmd
    @echo off
     
    echo 1 %
    echo 2 %%
    echo 3 %%%
    echo 4 %%%%
    echo 5 %%%%%
    echo 6 %%%%%%
     
    C:\Users\walid\Desktop>foo.cmd
    1
    2 %
    3 %
    4 %%
    5 %%
    6 %%%
     
    C:\Users\walid\Desktop>

    donc dans ton cas '%' échappe le deuxième '%' est le dernier est ignoré

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 80
    Points : 74
    Points
    74
    Par défaut
    Juste que dans mon cas le programme fonctionne avec 3 j'ai pas cherché plus loin, mais surement que la logique que cite s'applique, mais c'est en dehors de ma compréhension de ce vendredi soir, mais merci pour ton explication j'y reviendrais à tête reposé!!!

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

Discussions similaires

  1. Réponses: 50
    Dernier message: 23/07/2007, 15h49
  2. Réponses: 9
    Dernier message: 19/12/2005, 16h41
  3. Remplacer une ressource du réseau lorsqu'elle est utilisée
    Par Charette dans le forum Web & réseau
    Réponses: 6
    Dernier message: 22/06/2005, 11h46
  4. Réponses: 3
    Dernier message: 26/02/2005, 09h33

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