Problème de conversion ASCII/ANSI
Posté : 09 juin 2011 16:13
Bonjour à tous !
Pour pouvoir attribuer 2 IP à ma carte réseau sans respecter la contrainte de les déclarer toutes les deux en statique (l'une provient d'un DHCP), j'essaie de créer un batch qui récupère les informations réseau au démarrage (1 adresse attribuée par le DHCP), redéclare cette même adresse en statique puis déclare la deuxième.
J'arrive a récupérer toutes les informations correctement (nom de la carte, ip et passerelle) grâce à des boucles de ce type :
... et deux autres pour l'IP et la passerelle.
Mon problème est le suivant : si a l'issue de cette boucle je fais un echo %nom%, j'obtiens Connexion au rùseau local 2 au lieu de Connexion au réseau local 2... (le ù est majuscule mais je ne sais pas le refaire :p)
Coincidence : "ù" majuscule en ASCII = 233 et "é" en ANSI =... 233 !
Bref, la commande d'ajout d'une IP :
renvoie une erreur "Nom de carte réseau invalide", et je suis bloqué !
J'ai pensé à une solution dans la boucle for de récupération du nom, du type :
mais ce code ne fait rien pour deux raisons :
- la condition %%I=r?seau n'est jamais vraie, alors que par exemple %%G=Connexion est vraie...
- la commande set I=réseau ne génère pas d'erreur mais ne fait rien. J'ai lu quelque part qu'il fallait rajouter la ligne SETLOCAL ENABLEDELAYEDEXPANSION pour manipuler les variables dans une boucle, mais je ne trouve rien sur la bonne syntaxe.
Merci d'avance si quelqu'un à une solution !
Pour pouvoir attribuer 2 IP à ma carte réseau sans respecter la contrainte de les déclarer toutes les deux en statique (l'une provient d'un DHCP), j'essaie de créer un batch qui récupère les informations réseau au démarrage (1 adresse attribuée par le DHCP), redéclare cette même adresse en statique puis déclare la deuxième.
J'arrive a récupérer toutes les informations correctement (nom de la carte, ip et passerelle) grâce à des boucles de ce type :
Code : Tout sélectionner
ipconfig > ipconfig.txt
for /f "tokens=3,4,5,6,7" %%G in ('find "Connexion" ipconfig.txt') do (
if %%K==: (set nom=%%G %%H %%I %%J) else (set nom=%%G %%H %%I %%J %%K)
)
Mon problème est le suivant : si a l'issue de cette boucle je fais un echo %nom%, j'obtiens Connexion au rùseau local 2 au lieu de Connexion au réseau local 2... (le ù est majuscule mais je ne sais pas le refaire :p)
Coincidence : "ù" majuscule en ASCII = 233 et "é" en ANSI =... 233 !
Bref, la commande d'ajout d'une IP :
Code : Tout sélectionner
netsh in ip add address "%nom%" %ipadress% 255.255.255.0 %passerelle%
J'ai pensé à une solution dans la boucle for de récupération du nom, du type :
Code : Tout sélectionner
if %%I=r?seau set I=réseau
- la condition %%I=r?seau n'est jamais vraie, alors que par exemple %%G=Connexion est vraie...
- la commande set I=réseau ne génère pas d'erreur mais ne fait rien. J'ai lu quelque part qu'il fallait rajouter la ligne SETLOCAL ENABLEDELAYEDEXPANSION pour manipuler les variables dans une boucle, mais je ne trouve rien sur la bonne syntaxe.
Merci d'avance si quelqu'un à une solution !
