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:
Problème: les caractères spéciaux font planter le script!
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
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 )
Le code supporte presque tout mais de temps en temps il plante!
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
j'ai pourtant testé tous les caractères spéciaux un à un et il tient bon, mais quand je metil crash. Je pense avoir testé toutes les autres combinaisons mais il est possible que j'en ai loupé une au passage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part &"&
Y'a t-il un moyen d'éviter cela?
Partager