Commande DOS + IP

chamicki -  
 Utilisateur anonyme -
Bonjour,

J'utilise des commande Dos pour récuperer la config IP de mon ordi grâce à :
netsh -c interface dump > c:\configordi.txt
ensuite j'écris l'ip le masque dont j'ai besoin comme ceci :
netsh interface ip set address name="Connexion au r‚seau local" source=static addr=10.250.250.251 mask=255.255.255.0
Or, mon programme étant destiné a plusieurs personnes j'aimerai savoir si il serai possible de récupérer dans une variable le nom du réseau local actif et mettre cette variable à la place de "Connexion au r‚seau local" comme cela mon .bat marcherai sur tout les ordinateurs.

Est-ce que quelqu'un sais faire cela ???

Merci d'avance

Chamicki

21 réponses

  • 1
  • 2
Résumé de la discussion

Le souci est de récupérer dynamiquement le nom de l'interface réseau locale active afin de l'utiliser dans une commande netsh et rendre le script BAT fonctionnel sur différents ordinateurs. Plusieurs approches évoquées consistent à parser la sortie de netsh ou ipconfig par for /F pour extraire le nom de l'interface puis l'injecter dans la commande d'adresse. Des limites existent selon les versions de Windows et les noms d'interface peuvent varier entre « Connexion au réseau local » et d'autres libellés, ce qui complexifie une solution universelle sans interface graphique. En cas de besoin, certains proposent de renommer l'interface en un nom standard ou d'utiliser une approche plus générale comme afficher puis configurer l'interface détectée, ou d'inclure plusieurs BAT dédiés.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Utilisateur anonyme
     
    Un sujet qui m'intéresse =) j'ai également fais des fichiers bat car j'ai des config différentes avec mon portable.

    En cherchant bien je suis remonté jusqu'à windows 98 qui utilise le nom "Connexion au réseau local". Donc en théorie ça marche partout !

    Mais si tu veux faire un truc générique c'est à dire pour plusieurs utilisateurs, et si un utilisateur a 2 cartes en Ethernet et 1 en wifi comment savoir sur quelle interface il faut entrer les IP ? car Connexion au réseau local est pour la carte Ethernet 1, Connexion au réseau local 2 pour la deuxième etc... Là c'est plutot un logiciel qu'il faut créer et donc pas un .bat !

    Pour ma part j'ai laissé tombé et j'ai fait un zip avec 2 bat et un lisez-moi disant qu'il faut renommer l'interface à configurer en "aConfigurer" au lieu de Connexion au réseau local.
    Le 1er bat configure l'interface "aConfigurer" et l'autre qui réinitialise le nom de l'interface (donc la remet en "Connexion au réseau local").

    2
    1. chamicki
       
      Merci de ton aide,
      cependant je pense que l'on pourrais récupérer le nom de la connexion active mais je ne sais pas comment.

      Ma procédure doit simplifier la modification de l'IP donc je ne veux pas que l'utilisateur est besoin de changer de nom etc car c'est bien trop compliquer pour eux.

      Si quelqu'un à une idée ???
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    essaye ça

    $ type aa.bat
    @echo off
    for /F "tokens=3,* " %%I in ('netsh interface ip show config^|findstr Configuration') do ( set nom=
    %~J)
    echo %nom%

    $ aa
    Connexion au réseau local 3
    1
    1. chamicki
       
      Ceci ne fonctionne pas erreur de type ...
      0
    2. Utilisateur anonyme > chamicki
       
      as-tu essayé mon dernier commentaire ?
      0
    3. chamicki > Utilisateur anonyme
       
      sa ne marche pas !!!
      0
    4. Utilisateur anonyme > chamicki
       
      le commentaire numéro 26 ne marche pas ?!! il marche sous XP SP2, SP3 Vista SP1 et Windows 7 build 7000...
      0
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > chamicki
       
      le code suivant est sur une seule ligne et il manquait un double % à la fin
      for /F "tokens=3,* " %%I in ('netsh interface ip show config^|findstr Configuration') do ( set nom=%%~J) 
      0
  3. Utilisateur anonyme
     
    qu'entends tu par connexion active ? su mon PC j'ai deux cartes Ethernet et 1 Wifi et 1 virtuel, les 4 sont actives...
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    tu cherches la commande qui retourne "Connexion au r‚seau local" ou comment placer "Connexion au r‚seau local" damns une variable?
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Hi,

      A mon avis les deux, l'une découlant de l'autre ;-))
      0
      1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        L'oeuf et la poule en quelque sorte. Mais dans la mesure ou "Connexion au r‚seau local" est le nom effectif donné par W$ à la connexion et non pas un terme générique, l'exemple donné dans la question peut impliquer que le nom de la connexion est déjà connu.
        0
      2. chamicki > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        En fait je branche mon câble réseau et je veut savoir le nom de la connexion sur lequel il est branché. Sur cetains ordi c'est "connexion au réseau local" sur d'autre "connexion au réseau local 2" ou j'ai encore des exemple ou elle porte le nom du constructeur comme "Belkin" par exemple.

        Avez-vous compris ?
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    dubcek si t'avais les deux ça serait cool ^^

    j'ai trouvé netsh diag show adapter pour afficher les cartes réseaux
    0
    1. chamicki
       
      la commande netsh diag show adapter donne le nom de la carte mais pas celle du réseau, n'existe-t-il pas une commande de la sorte pour connaitre le réseau ? Au pire en entrant le nom de la carte vu qu'on l'a maintenant ...
      0
  7. Utilisateur anonyme
     
    Justement c'est ça qui est limite impossible, comment peut tu savoir sur quelle interface il veut configurer ? il faut lui demander avant à moins d'être devin ?

    Donc dans l'exemple où je lui demande de renommer c'est le seul truc que j'ai pu trouver. Après ça relève de la programmation, détecter sur quelle interface le câble est branché et encore imaginons qu'il a deux câbles de branché...

    Il faut faire une interface graphique que laquelle on lui demande de cliquer sur l'interface qu'il veut configurer et là peut-être c'est plus simple...

    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    que retourne
    for /F "tokens=3*" %I in ('ipconfig^|findstr Ethernet') do ( echo %I %J)
    0
    1. chamicki
       
      Sa à l'air pas mal du tout ceci !!!
      Plus que le mettre dans une variable mais sa devrais être parfait... enfin à tester !!!
      Merci beaucoup de ton aide, je vais voir ce que je peux en faire.
      0
    2. chamicki
       
      Lorsque je met la commande dans un fichier bat et que je lance : le fenetre DOS s'ouvre et se referme immédiatement....
      Sais-tu pourquoi ?
      0
  9. Utilisateur anonyme
     
    mais comment faire pour créé ma propre commande ms-dos
    0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    je demandais
    Que retourne
    for /F "tokens=3*" %I in ('ipconfig^|findstr Ethernet') do ( echo %I %J)

    parce que chez moi, elle retourne 2 lignes
    essayer
    for /F "tokens=2*" %I in ('ipconfig^|findstr Ethernet') do ( set nom=%J)
    echo %nom%
    0
  11. Utilisateur anonyme
     
    Si je crée un bat ça ne fait rien ! il me dit J) inattendue

    Par contre si je colle directement, ça me retourne :

    C:\Documents and Settings\titi\Bureau>for /F "tokens=2*" %I in ('ipconfig^|findstr Ethernet') do ( set nom=%J)

    ) Documents and Settings\titi\Bureau>(set nom=Connexion au rÚseau local:

    C:\Documents and Settings\titi\Bureau>echo %nom%
    Connexion au rÚseau local:

    bon je ne serais pas là de la soirée ! je vous lis demain =)

    0
  12. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    dans un bat, il faut doubler les %
    for /F "tokens=2*" %%I in ('ipconfig^|findstr Ethernet') do ( set nom=%%J)
    0
  13. Utilisateur anonyme
     
    ********* fichier bat***********
    @echo off
    cls
    for /F "tokens=2*" %%I in ('ipconfig^|findstr Ethernet') do ( set nom=%%J)
    echo %nom%

    ping -n 10 127.0.0.1 >nul

    ******************

    le ping sert à faire une pause.

    le resultat est :

    Connexion au rÚseau local:

    Fait chier le Ù pourtant j'ai enregistré au format MS-DOS :S

    Mais tu y es presque. Je décolle dans 5min !! à demain !
    0
  14. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    cette commande devrait fonctionner, mais il suffit de trouver comment définir le " comme délimiteur de delims,
    j'ai essayé \" ^" \\" "" etc
    for /F "tokens=2 delims=\"" %%I in ('netsh interface dump ^|findstr address') do ( set nom=%%I)
    echo %nom%
    0
  15. Utilisateur anonyme
     
    Retour -> " Connexion au réseau local"

    Mais pas ma deuxième carte Ethernet qui s'appelle "Connexion au réseau local 2"
    0
  16. Utilisateur anonyme
     
    nan en fait c'est bon le echo est en dehors de la boucle, donc il m'affiche la dernière carte réseau.
    ça me récupère bien les noms de mes cartes réseau. Il faut enlever les "" et faire un petit programme demandant à l'utilisateur de choisir l'interface, genre 1 pour la carte 1, 2 pour la deuxième !

    je vais essayé ça =)
    0
  17. Utilisateur anonyme
     
    J'ai fait ça, je ne sais pas comment créer un tableau pour récuperer tous les noms des cartes afin d'identifier avec le chiffre correspondant par exemple :
    tableau_de_nom[1] = "Connexion au réseau local"
    tableau_de_nom[2] = "Connexion au réseau local"
    tableau_de_nom[3] = "Wifi"

    Ensuite de demander taper 1 ou 2 ou 3 ... donc là lui montre le résultat et de taper le nom qu'il veut, voilà le batch

    @echo off
    cls

    echo Il existe plusieurs cartes configurables, quelle est celle à configurer ?
    echo.
    REM set /a cpt="0"
    for /F "tokens=3,* " %%I in ('netsh interface ip show config^|findstr Configuration') do ( echo %%J
    echo.
    )
    echo.
    set /p nom=Entrez celle que vous le souhaitez AVEC les guillemets :

    set /p ip=Entrez l'adresse IP :
    set /p masque=Entrez le masque :
    set /p passerelle=Entrez la passerelle par défaut :
    set /p dns=Entrez l'adresse DNS :

    echo.
    echo Configuration de votre connexion, cette opération peut prendre plusieurs secondes
    echo.

    echo Configuration de l'adresse IP
    netsh interface ip set address %nom% static %ip% %masque% %passerelle% 1

    echo Configuration du serveur DNS
    netsh interface ip set dns %nom% static %dns%

    echo.
    echo Configuration terminée
    echo.

    echo.
    pause
    0
  18. Utilisateur anonyme
     
    Pas si résolu que ça finalement.

    Sous Vista ça ne marche pas car le résultat retourné par la commande netsh interface ip show config|findstr Configuration renvoie sous Vista => Configuration pour l'interface « Connexion au réseau local »
    Alors que sous 2000, XP et Seven (testé) => Configuration pour l'interface "Connexion au réseau local"

    Et donc lorsqu'on essaie de configurer avec mon batch ça ne marche pas à cause des guillemets « »
    Allez comprendre pourquoi ils ont remplacé sous Vista et non Seven :S

    J'ai essayé d'améliorer le script afin de gérer ces accents (avec les delims etc... mais j'avoue que j'ai du mal car je ne suis pas un expert).
    -> j'ai essayé d'inmbriquer des FOR etc... mais nada ! je continu mes recherches !

    Avez-vous essayé sous Vista ?
    0
  19. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    regarde dans l'aide de la commande for sur Vista voir si il n'y a pas une variable pour supprimer les «, comme %~I pour les " sur XP
    0
    1. Utilisateur anonyme
       
      il me dit la même chose que sous XP -> %~I - étend %I en supprimant les guillemets (")

      Sachant que ce script est destiné aux étudiants ne sachant rien faire, et qu'ils ont vista avec l'achat d'un portable, ça va pas le faire GRRRRRRRR

      Je post un nouveau sujet
      0
      1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > Utilisateur anonyme
         
        essaye d'utiliser «» comme délimiteurs, ça les fera disparaitre
        delims=«,»
        Connexion au réseau local devient alors le dernier jeton tokens=1,*

        for /F "delims=«,» tokens=1,*" %%I in ('netsh interface ip show config^|findstr Configuration') do echo %%J
        0
      2. Utilisateur anonyme > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        for /F "tokens=2 delims=«»" %%a in (%str%) do (
        set nom=%%a
        )

        renvoi sans les guillemets mais la j'ai des espaces avant et après le nom, ça existe trim en DOS ^^
        0
      3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660 > Utilisateur anonyme
         
        tu repasses le tout dans un for avec espace comme séparateur
        0
      4. Utilisateur anonyme > dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention  
         
        @echo off
        cls
        setlocal enabledelayedexpansion

        set chaine="Configuration pour l'interface « Connexion au réseau local »"

        for /F "tokens=2 delims=«»" %%a in (%chaine%) do (
        set str=%%a
        REM --enelve espace à la droite et à gauche--
        if "!str:~0,1!"==" " if "!str:~-1!"==" " set str=!str:~1,-1!
        )
        echo :%str%:

        pause


        OU encore plus simple un str_replace =>
        set new=%chaine:« ="%
        set new=%new: »="%

        C'est good ^^ merci

        Excellent site pour les manipulations sur les chaines etc -> https://www.dostips.com/DtTipsStringOperations.php
        0
  20. Utilisateur anonyme
     
    Je vais voir, je fais mes recherches là et je testerai à midi ou ce soir car la je suis sous XP =). Merci !
    0
  • 1
  • 2