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 :

set /p et caractères spéciaux


Sujet :

Scripts/Batch

  1. #1
    Membre du Club
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Par défaut set /p et caractères spéciaux
    Bonjour,

    Je suis actuellement en train de réaliser un petit batch pour une sauvegarde, et si la sauvegarde ne s'effectue pas correctement, il est demandé à l'utilisateur si il souhaite effectuer une nouvelle tentative:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    set /p "choix=>"
    if not defined %choix% goto NONCOMPRIS
    if /I %choix%== o goto INSTALLATION
    if /I %choix%== oui goto INSTALLATION
    if /I %choix%== y goto INSTALLATION
    if /I %choix%== yes goto INSTALLATION
    if /I %choix%== n goto LATER
    if /I %choix%== no goto LATER
    if /I %choix%== non goto LATER
    goto NONCOMPRIS
    Problème: les caractères spéciaux font planter le script!

    J'ai tenté des petits workaround en controlant avec des "%errorlevel%" en mettant "@set /p"
    ou encore avec des boucles "for /f" pour chercher des caractères spéciaux et inscrire une valeur (genre false ou pascompris, etc..) dans %choix%.
    Pour cela j'utilisait une valeur tampon: set /p input= et si %input% ne contenait aucun caractères définis (vérifiés par la boucle for /f) je mettais choix=%input%.
    J'ai aussi fait une tentative avec if "%choix:"=%"=="" mais sans succès.

    Mais il semblerait que j' échoue lamentablement à chaque fois. Soit le programme ne plante jamais mais il va directement à :NONCOMPRIS, soit il plante avec:
    les espaces et avec ,&;^`|<>

    Si quelqu'un pouvait m'indiquer une direction dans laquelle regarder cela me permettrait d'avoir un programme un peu plus sûr.

    Cordialement,

    PY

    Edit:

    en allant trainer du coté des FAQ je me suis laisser tenter par une nouvelle tentative d'utilisation de "setlocal enableDelayedExpansion" même si les précédentes étaient infructueuses.

    J'arrive désormais à ceci (mon fichier de test )
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    :TEST
    @echo off
    cls
    Echo.
    Echo.
    Echo "Test"
    Echo.
    Echo.
    set /p input=
    setlocal enableDelayedExpansion
    set choix=default
    for /F %%D in ("%input%") do (
    for /F "tokens=1 delims=\&;<>^`%ù*µ$£¤!§:/.,?~é'|è²_] ()+-*°=" %%E in ("%%D") do (
    set choix=%%E
    echo "voici choix: !choix! et voici input: %input%"
    pause
    if /I !choix!== n goto W00T
    if /I !choix!== n goto W00T
    if /I !choix!== no goto W00T
    if /I !choix!== non goto W00T
    if /I !choix!== default GOTO NONCOMPRIS
    pause
    goto NONCOMPRIS
    )
    )
    endlocal
    :NONCOMPRIS
    cls
    Echo.
    Echo.
    Echo " Pas comprendre "
    pause
    goto TEST
    :W00T
    cls
    Echo.
    Echo.
    Echo " Trois petits cochons.... w00t! "
    pause
    goto TEST
    Le code supporte presque tout mais de temps en temps il plante!

    j'ai pourtant testé tous les caractères spéciaux un à un et il tient bon, mais quand je met il crash. Je pense avoir testé toutes les autres combinaisons mais il est possible que j'en ai loupé une au passage.

    Y'a t-il un moyen d'éviter cela?

  2. #2
    Membre du Club
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Par défaut
    Bon, après de nombreuses tentatives, j'en arrive à ceci:



    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    :TEST
    @echo off
    cls
    Echo.
    Echo.
    Echo "Test"
    Echo.
    Echo.
    set /p input=
    set str=%input%
    set str=%str: =a%
    set str=%str:"=b%
    set str=%str:&=c%
    set input=%str%
    echo %input%
    setlocal enableDelayedExpansion
    pause
    for /F %%D in ("%input%") do (
    for /F "tokens=1 delims==éèçà@\;%ù*µ$£¤!§:/.,?~^|`'²_]=()+-*°" %%E in ("%%D") do (
    set choix=%%E
    echo %choix% et !choix!
    pause
    if /I !choix!== n goto W00T
    if /I !choix!== n goto W00T
    if /I !choix!== no goto W00T
    if /I !choix!== non goto W00T
    if /I !choix!== default GOTO NONCOMPRIS
    echo rien compris apparement..
    pause
    goto NONCOMPRIS
    )
    )
    endlocal
    :NONCOMPRIS
    cls
    Echo.
    Echo.
    Echo " toujours pas... "
    pause
    goto TEST
    :W00T
    cls
    Echo.
    Echo.
    Echo " Trois petits cochons.... w00t! "
    pause
    goto TEST
    un simple pipe "|" suffit à faire planter le script, ainsi que les redirections que ne j'arrive pas à éviter..

    Pour information il ne s'agit ici que d'un test du sachant que le tout est dans un script plus grand pour des sauvegardes.

    J'ai besoin de votre savoir et de votre sagesse car je bloque réellement sur ce point.

    Si vous souhaitez le code du "vrai" script je peux bien sûr le poster.

    Par avance, merci pour votre aide.

    Cordialement,

    PY

  3. #3
    Membre du Club
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Par défaut Victoire !!!
    Bon,
    après de looooongues souffrances j'ai enfin vaincu la bête !!!!!

    Je vous propose le code car cela peut servir.

    Je n'ai pas encore réussi à le faire planter ( sauf avec alt+f4 of course! ) mais si vous y arriver, merci de me l'indiquer!!!

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    @echo off
    :TEST
    for /f "tokens=1-3 delims=/" %%f in ("%date%" ) do ( 
    set calendrier=%%f%%g%%h 
    set jour=%%f 
    set mois=%%g 
    set année=%%h)
    for /f "tokens=1-4 delims=*:," %%i in ("%time%" ) do ( 
    set horodatage=%%i%%j%%k%%l 
    set heure=%%i 
    set minute=%%j 
    set seconde=%%k
    set mili=%%l) 
    set now=%calendrier%%horodatage%
    set now=%now: =%
    setLocal enableDELAYedexpansion
    set input=rien
    set /p "input=>"
    for /f %%a in ("!input!") do (
    set str=%%a
    echo !str:^|=a! > %now%.txt
    for /f "tokens=* delims= " %%b in (%now%.txt) do (
    set str=%%b
    echo !str:^&=b! > %now%.txt
    for /f %%z in (%now%.txt) do (
    set str=%%z
    echo !str:^<=c! > %now%.txt
    for /f %%y in (%now%.txt) do (
    set str=%%y
    echo !str:^>=d! > %now%.txt
    for /f %%x in (%now%.txt) do (
    set choix=%%x
    del !now!.txt
    if /I !choix!== n goto W00T
    if /I !choix!== n goto W00T
    if /I !choix!== no goto W00T
    if /I !choix!== non goto W00T
    if /I !choix!== default GOTO NONCOMPRIS
    echo rien compris apparement..
    goto NONCOMPRIS
    )
    )
    )
    )
    )
    endlocal
    :NONCOMPRIS
    cls
    Echo.
    Echo.
    Echo " toujours pas... "
    pause
    goto TEST
    :W00T
    cls
    Echo.
    Echo.
    Echo " Trois petits cochons.... w00t! "
    pause
    goto TEST

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

Discussions similaires

  1. [JCL] SET et Caractères Spéciaux
    Par Antichoc dans le forum JCL - SORT
    Réponses: 8
    Dernier message: 09/08/2012, 13h21
  2. Où trouver la liste des caractères spéciaux?
    Par gamez dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2003, 17h54
  3. Transformation XSL et caractères spéciaux
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 4
    Dernier message: 28/04/2003, 10h38
  4. [Sybase] filtre sur caractères spéciaux
    Par montelieri dans le forum Sybase
    Réponses: 4
    Dernier message: 07/04/2003, 16h49
  5. Traiter les caractères spéciaux
    Par ricola dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2003, 09h23

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