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 :

Les accents dans une variable [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut Les accents dans une variable
    bjr,

    Comment faire pour affecter une valeur à une variable et pouvoir l'afficher correctement.
    Sans passer par la commande chcp 1252 ou chcp 850 par défaut.

    Juste

    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
    
    exemple:
    
    @Echo Off
    
    Set variable=aeiouyéèçà            Rem etc...
    Echo %variable%                    Rem obtenir à l'affichage     aeiouyéèçà et non pas     aeiouyÚeþa
    
    Par exemple j'ai trouvé que pour afficher un chevron >
    
    Echo ^>                            Rem cela affiche correctement un > à l'écran
    
    
    En gros, tout ceci pour pouvoir faire un 
    
        Set utilisateur_nom=toto
        Set password=pépé
        Set domaine_nom=ddddd
    
        Net Use \\adresse_ip /user:%domaine_nom%\%utilisateur_nom% %password%
    
    Avec un accent dans le password
    
    si je fais 
    
    Net Use \\adresse_ip /user:domaine_nom\utilisateur_nom
    
    cela me demande le mot de passe et ainsi cela fonctionne, 
    mais si je veux inclure le mot de passe dans la commande directement, il y a un problème avec le é
    
    le é est pris comme Ú
    merci

    PS: j'ai cherché sur le net et rien trouvé

  2. #2
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @echo off
    chcp 65001 >nul
    
    Set "variable=aeiouyéèçà"
    Echo %variable%

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    merci pour la réponse mais cela ne fonctionne pas

    à la place de aeiouyéèçà j'obtiens aeiouy�e�a

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Tu peux mettre les valeurs dans un fichier txt :

    in.txt :

    toto,aeiouyéèçà
    et ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @echo off
    
    for /f "tokens=1,2 delims=," %%a in (in.txt) do echo nom = %%a password = %%b
    ça devrait le faire !!


  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    malheureusement toujours le même problème

    voici la sortie

    Nom utilisateur = ***** utilaeiouy���� ***** Password = ***** mdpaeiouy���� *****

    voici le code

    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
    @Echo off
    
    Set repertoire_courant_chemin=%~DP0
    
    Chcp
    
    Chcp 65001 > Nul
    
    Rem utilisateur_nom=utilaeiouyéèçà
    Set utilisateur_nom=utilaeiouyéèçà
    
    Rem password=mdpaeiouyéèçà
    Set password=mdpaeiouyéèçà
    
    Echo %utilisateur_nom%,%password% > %repertoire_courant_chemin%test.txt
    
    For /f "tokens=1,2 delims=," %%a In (%repertoire_courant_chemin%test.txt) Do Echo Nom utilisateur = ***** %%a ***** Password = ***** %%b *****
    
    Rem Type %repertoire_courant_chemin%test.txt
    
    Pause
    
    Exit
    Il n'y a pas un moyen d'afficher un code ascii étendu ou non dans un batch avec un Set toto=aChr(130)a ou un Set toto = aAsc(130)a pour avoir en sortie aéa.

  6. #6
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    t'as essayé de créer le in.txt directement sans passer par un .bat, avec notepad ?

    et ensuite tu recupères les valeurs depuis le in.txt comme je te l'ai suggeré plus haut ???

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    non, je n'ai pas essayé de le faire directement mais j'ai fini par trouver une solution qui fonctionne.
    c'est une commande Chcp comme toi mais différente

    voilà le code

    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
    @Echo off
    
    Rem la commande Chcp donne la page de code active, en général 850
    Chcp
    
    Rem permet d'avoir els accents dans la console
    Rem au début du script. Ceci change la page de code de l'affichage à ISO-8859-1, qui est la page de code ANSI du fichier bat.
    chcp 28591 > nul
    
    Rem permet d'avoir les accents dans la console
    Rem Si vous voulez utiliser des caractères spéciaux encore plus internationaux, le fichier bat peut être sauvegardé en UTF-8 (sans BOM)
    Rem avec un éditeur texte plus spécialisé comme Notepad++ ou UltraEdit, et dans ce cas on utilise
    Rem Chcp 65001>Nul
    
    Set repertoire_courant_chemin=%~DP0
    
    Rem utilisateur_nom=utilaeiouyéèçà
    Set utilisateur_nom=utilaeiouyéèçà
    
    Rem password=mdpaeiouyéèçà
    Set password=mdpaeiouyéèçà
    
    Echo.
    
    Echo %repertoire_courant_chemin%test.txt
    Echo %utilisateur_nom%,%password% > "%repertoire_courant_chemin%test.txt"
    
    Echo.
    Echo.
    
    For /f "tokens=1,2 delims=," %%a In ('Type "%repertoire_courant_chemin%test.txt"') Do Echo Nom utilisateur = ***** %%a ***** Password = ***** %%b *****
    Rem sortie dans la console     Nom utilisateur = ***** utilaeiouyéèçà ***** Password = ***** mdpaeiouyéèçà  *****
    Rem cela fonctionne
    
    Echo.
    Echo.
    
    Rem pour afficher un fichier texte dans la console
    Type "%repertoire_courant_chemin%test.txt"
    
    Pause
    
    Exit
    La différence se situe au niveau du nombre après la commande Chcp.
    Cela fonctionne pourtant j'ai mis mon éditeur PsPad en UTF-8 donc ta proposition aurait du être, il me semble la bonne
    un Chcp 65001 mais non il faut un Chcp 28591.
    Enfin le principal c'est que cela fonctionne.

    J'ai mis ce code

    In ('Type "%repertoire_courant_chemin%test.txt"')

    Car le chemin du répertoire courant contient un espace et donc comme c'est un fichier "test.txt" je n'ai pas pu faire ce code

    In ("%repertoire_courant_chemin%test.txt") car c'est interprété comme une chaîne de caractères et non plus comme un fichier

    Mais si tu as une autre idée, je suis preneur pour ce problème.



    voici ce que j'ai trouvé sur les caractères d'échappement pour les caractères spéciaux

    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
    
    Character to be escaped	Escape Sequence	Remark
    
    %	%%	May not always be required in doublequoted strings, just try
    ^	^^	May not always be required in doublequoted strings, but it won't hurt
    &	^&
    <	^<
    >	^>
    |	^|
    '	^'	Required only in the FOR /F "subject" (i.e. between the parenthesis), unless backq is used
    `	^`	Required only in the FOR /F "subject" (i.e. between the parenthesis), if backq is used
    ,	^,	Required only in the FOR /F "subject" (i.e. between the parenthesis), even in doublequoted strings
    ;	^;
    =	^=
    (	^(
    )	^)
    !	^^!	Required only when delayed variable expansion is active
    "	""	Required only inside the search pattern of FIND
    \	\\	Required only inside the regex pattern of FINDSTR
    [	\[
    ]	\]
    "	\"
    .	\.
    *	\*
    ?	\?
    Je laisse le post non résolu, si une autre personne a une autre idée pour afficher les accents.


    EDIT:

    Je viens d'essayer ta méthode en créant le fichier in.txt sans passer par le .bat cela ne fonctionne pas non plus avec un Chcp 65001>Nul mais avec un Chcp 28591>Nul cela fonctionne.

  8. #8
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    En éditant ou convertissant ton script en OEM, tu n'auras besoin de chcp.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    oui cela fonctionne en convertissant en OEM, sans aucun chcp mais quand j'ai voulu repasser mon script en UTF-8 toujours avec PsPad, j'avais un affichage erroné des caractères.

    J'ai fini par trouver un autre moyen sans chcp en gardant celui de la console d'origine qui est le 850.

    En cherchant sur internet je suis tombé sur une micro table de conversion de caractères que le 850 comprend.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Rem … à
    Rem ‚ é
    Rem Š è
    Rem ˆ ê
    Rem Œ î
    Rem — ù
    Rem Ò Ê
    Rem ‡ ç
    Rem ø °
    Il suffit de copier le caractère correspondant à la place du caractère accentué voulu.

    Exemple pour le mot défaut => d,faut.
    Et cela affiche bien un é dans la console.
    Attention ce n'est pas une simple virgule.

    voir fichier txt joint à ce post ou les caractères dans le code, faire un copier-coller.

    EDIT :

    Pour avoir la liste des caractères correspondants aux caractères accentués, il faut faire ALT 0130 pour le é.

    Pour afficher é â ä à å ç ê ë è ? il faut faire ALT 0130, jusqu'à ..., ALT 0139, la correspondance qu'on peut retrouver dans la table en UTF-8 mais pas dans le bon ordre.
    ALT 130 c'est pour le Chcp 1252 et ALT 0130 c'est pour le Chcp 850.

  10. #10
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    Une fois ton script en OEM, il ne faut pas le reconvertir en UTF8 avec un logiciel,
    surtout si tu ne peux pas spécifier l'encodage de départ. D'ailleurs, les scripts cmd
    ne doivent être qu'en ANSI ou OEM, car si mal utilisés avec les autres encodages,
    ça peut poser des problèmes inattendus.

    Si tu as un éditeur hexadécimal et que tu compares la sortie des ALTxxx et celle
    d'une conversion, tu verras que c'est le même résultat, sauf que manuellement
    avec ALT, c'est plus laborieux.

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    Bien.
    merci pour tes réponses

    Le mieux n'est-il pas de convertir ni en ANSI ni en OEM prendre le bloc note et créer un .bat.
    Laisser la page de codes active en 850 qui est par défaut et prendre les caractères ( correspondance ) que le 850 comprend, non ?

    J'ai vérifié ma version portable de PsPad, elle est par défaut en ANSI, j'ai donc remis ANSI pour ma version installée.

  12. #12
    Membre actif
    Homme Profil pro
    007
    Inscrit en
    Octobre 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : 007

    Informations forums :
    Inscription : Octobre 2014
    Messages : 119
    Par défaut
    Tant que tu n'utilises que les symboles et lettres latines de la table ASCII,
    tout se passe bien. Là où ça se gâte, c'est quand tu as à faire à des
    caractères étendus, il est alors indispensable de spécifier le code page
    correspondant, sauf s'il est déjà défini par défaut dans la base de registre,
    sous OEMCP dans HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage.
    Chez toi, il s'avère que c'est 850, mais pas pour tout le monde. En fait, ça
    dépend des pays, des régions et des cultures.

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2008
    Messages : 35
    Par défaut
    Merci à tous les deux,

    Je vais mettre Chcp 850>Nul en début de script quand j'aurais des caractères spéciaux et mettre la correspondance des caractères avec Alt 0... pour avoir ce que je veux...

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

Discussions similaires

  1. Récupérer les header dans une variable
    Par alex.hitman dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2007, 18h18
  2. Ignorer les accents dans une requête
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/03/2007, 12h19
  3. Supprimer les accent dans une chaine
    Par avigeilpro dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/09/2006, 11h04
  4. Remplacer les accents dans une chaîne
    Par mathieumg dans le forum C
    Réponses: 9
    Dernier message: 23/07/2006, 15h39
  5. ignorer les accents dans une recherche
    Par nono_cap dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2006, 17h30

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