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 :

Problème d'encodage sur le contenu d'une variable [Batch]


Sujet :

Scripts/Batch

  1. #1
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut Problème d'encodage sur le contenu d'une variable
    Bonjour à tous,

    Je rencontre une problématique d'encodage des caractères avec une variable contenant le résultat d'une commande wmic et j'en appelle à vos lumières pour m'éclairer

    Je souhaite faire un script qui va récupérer le "friendly name" de l'interface réseau active, mettre ce résultat dans une variable pour s'en resservir ensuite avec d'autres commandes.

    J'arrive à faire ce que je veux mais mon problème est que ce résultat n'a pas la même valeur au niveau du caractère accentué selon que je l'affiche (via echo) ou que je la réutilise.

    En effet un echo va me ressortir "Connexion au réseau local" tandis que réutiliser la variable dans une commande netsh prend la valeur "Connexion au r‚seau local" (et je reçois donc un message de syntaxe incorrecte confirmé en redirigeant la sortie dans un fichier texte)

    Je suis loin d'être à l'aise avec les scripts et des optimisations sont certainement possibles mais voici le code que j'écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    REM on échappe le pipe avec le circonflexe pour prise en charge dans le script
    REM on exclue les lignes ressortant les interfaces réseau des machines virtuelles locales, des interfaces wifi et bluetooth, des interfaces vpn (/v pour exclure /i pour ignorer la casse)
    REM on supprimes les lignes vides de la sortie (/v pour exclure /r pour interpreter la chaine comme une expression régulière)
    REM on place le résultat de la commande dans une variable nic
    @echo off
    cls
    for /F "tokens=* delims==" %%A in ('wmic nic where "NetConnectionStatus=2" get NetConnectionID ^| more +1 ^| findstr /iv virtual ^| findstr /vi "sans fil" ^| findstr /vi wireless ^| findstr /vi vpn ^| findstr /vi tooth ^| findstr /rv "^$"') do set "nic=%%A"
    echo %nic%
    netsh interface ip set address "%nic%" dhcp
    pause
    Voici donc l'output du script, la première ligne étant le résultat de l'echo, la seconde du netsh:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Connexion au réseau local
    La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte.
    Je pourrais inscrire en dur le nom de l'interface réseau et cela fonctionne mais ma volonté est que le script soit le plus dynamique possible, adaptable avec des nomenclatures d'interface en anglais.

    Merci d'avance pour toutes les pistes et explications que vous pourriez apporter à mon interrogation.

  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,

    J'ai l'impression que ça n'est pas la source de ton probleme.

    Es-tu sûr que [Connexion au réseau local] est un argument valable pour netsh ?

    jette un oeil ici : https://technet.microsoft.com/pt-br/...29.aspx#BKMK_1


  3. #3
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Bonjour sachadee

    Merci pour ton retour.

    Toujours est-il qu'en ouvrant un terminal et en saisissant à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netsh interface ip set address "Connexion au réseau local" dhcp
    la carte réseau passe bien d'une IP statique à du DHCP donc je suppose que l'argument ne lui déplait pas tant qu ca

    Pareil en static avec l'argument "Connexion au réseau local", la commande s'applique bien

  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
    Autant pour moi !

    Il se passe quoi si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netsh interface ip set address "%nic:‚=é%" dhcp
    ou le contraire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netsh interface ip set address "%nic:é=‚%" dhcp

  5. #5
    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
    j'ai un script de modification du dns qui marche sur W7.

    il utilise en plus les arguments:
    name et source

    ce qui donnerait dans ton cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netsh interface ip set address name="%nic%" source=dhcp
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netsh interface ip set address "%nic%" dhcp
    sinon, pour les problèmes d'accents, on peut utiliser la page de code 28605:
    a mettre en début de script

    Sinon, pour cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    netsh interface ip set address "%nic%" dhcp
    et vu le message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    La syntaxe du nom de fichier, de répertoire ou de volume est incorrecte.
    je pencherai plutot pour un problème de " ou autre

    tu devrais ajouter un echo devant ta commande pour voir ce qui est réellement lancé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo   netsh interface ip set address "%nic%" dhcp
    je viens de tester et j'obtiens bizarrement des espaces supplémentaires en plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Connexion au réseau local   "

  6. #6
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Bonjour sachadee et raivac,

    Désolé pour ce retour tardif je n'ai pas pu retravailler sur ce script.

    Je test vos solution et reviens vers le forum avec le résultat.

    Bonne journée

  7. #7
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Merci sachadee mais avec ce code (l'un ou l'autre) la variable n'est plus reconnue comme une variable mais juste une chaine de texte.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Merci raivac,

    Avec les arguments name et source le résultat est le même que sans.

    Cependant j'ai creusé la question des espaces à la fin de ma variable (effectivement je testais avec un echo le contenu de ma variable qui me plaisait bien mais je ne voyais pas les espaces après; je les ai constatés en rajoutant des symboles à la suite de mon echo)

    Le problème venait bien de là (7 espaces à la suite de ma variable)

    Je règle le problème pas très finement en parsant ma variable dans un second temps : A ce moment le script fonctionne.

    Malgré tout ce n'est pas très "dynamique" comme solution et si il y a plus ou moins de 7 caractères en trop à la fin de ma chaîne le script ne fonctionnera plus.

    Y aurait-il un moyen de supprimer "tous les espaces à la fin d'une chaine contenue dans une variable"?

    Pour rappel mon code fonctionnel actuel est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    REM on échappe le pipe avec le circonflexe pour prise en charge dans le script
    REM on exclue les lignes ressortant les interfaces réseau des machines virtuelles locales, des interfaces wifi et bluetooth, des interfaces vpn (/v pour exclure /i pour ignorer la casse)
    REM on supprimes les lignes vides de la sortie (/v pour exclure /r pour interpreter la chaine comme une expression régulière)
    REM on place le résultat de la commande dans une variable nic
    @echo off
    cls
    for /F "tokens=* delims==" %%A in ('wmic nic where "NetConnectionStatus=2" get NetConnectionID ^| more +1 ^| findstr /iv virtual ^| findstr /vi "sans fil" ^| findstr /vi wireless ^| findstr /vi vpn ^| findstr /vi tooth ^| findstr /rv "^$"') do set "nic=%%A"
    set nic=%nic:~0,-7%
    netsh interface ip set address "%nic%" dhcp
    J'ai rapidement essayé 2-3 codes trouvés sur les forums mais sans succès.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Février 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Février 2016
    Messages : 6
    Par défaut
    Merci pour vos réponse messieurs.

    J'ai finalement réussi à obtenir le script que je souhaitais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    cls
    Setlocal EnableDelayedExpansion
    for /F "tokens=* delims==" %%A in ('wmic nic where "NetConnectionStatus=2" get NetConnectionID ^| more +1 ^| findstr /iv virtual ^| findstr /vi "sans fil" ^| findstr /vi wireless ^| findstr /vi vpn ^| findstr /vi tooth ^| findstr /rv "^$"') do set "result=%%A"
    set nic=%result%
    for /l %%a in (1,1,31) do if "!nic:~-1!"==" " set nic=!nic:~0,-1!
    netsh interface ip set address "%nic%" dhcp
    Je fais un deuxième traitement de ma variable (que je ne peux d'ailleurs pas faire à la volée je dois donc faire un set d'une autre variable donc le contenu est celui de la première) pour supprimer les espaces en fin de ligne
    Ce traitement est possible avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Setlocal EnableDelayedExpansion
    Ce script devrait donc s'adapter (à tester) aux versions de windows dans d'autres langues et possiblement d'autres versions également.

    Merci encore pour votre aide.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/11/2007, 15h32
  2. Réponses: 1
    Dernier message: 26/06/2007, 19h32
  3. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  4. Problème de scintillement sur le curseur d'une TTrackbar
    Par xtapola dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/11/2005, 13h51
  5. Index sur le contenu d'une colonne XMLTYPE
    Par haugoyard dans le forum Oracle
    Réponses: 7
    Dernier message: 11/04/2005, 11h10

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