62 votes

Comment puis-je obtenir l'adresse IP dans une variable de fichier de lot ?

J'ai une question étrange, je ne sais pas si c'est possible.

Je voudrais écrire un script, et par exemple je vais utiliser ipconfig comme commande.

Maintenant, quand vous exécutez normalement cette commande, il y a une tonne de résultats.

Ce que j'aimerais avoir, c'est un script qui ne montrerait que l'adresse IP, par exemple.

echo Network Connection Test
ipconfig <---This would run in the background
echo Your IP Address is: (INSERT IP ADDRESS HERE)

La sortie serait

Network Connection Test

Your IP Address is: 192.168.1.1

Est-ce que c'est possible ?

67voto

Fabio Iotti Points 935

Le code suivant fonctionne sur toute locale de toute plate-forme depuis Windows XP et il cherche le réseau IP à partir d'un échantillon (plus ou moins) aléatoire de vos cartes réseau. Cela ne prendra jamais plus de quelques millisecondes.

for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do set NetworkIP=%%a
echo Network IP: %NetworkIP%

Le suivant recherche votre IP public à la place et fonctionne sur les machines Windows 7 et plus récentes.

for /f %%a in ('powershell Invoke-RestMethod api.ipify.org') do set PublicIP=%%a
echo Public IP: %PublicIP%  

Vous pouvez trouver des explications détaillées de ces commandes sur mon blog .

51voto

mousio Points 4039

Ceci imprimera les adresses IP dans la sortie de ipconfig :

@echo off
set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
echo Network Connection Test
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do echo Your IP Address is: %%f

Pour n'imprimer que la première adresse IP, il suffit d'ajouter goto :eof (ou une autre étiquette pour sauter à la place de :eof ) après l'écho, ou sous une forme plus lisible :

set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
    echo Your IP Address is: %%f
    goto :eof
)

Une manière plus configurable serait d'analyser la sortie de la fonction ipconfig /all un peu, de cette façon vous pouvez même spécifier l'adaptateur dont vous voulez l'adresse IP :

@echo off
setlocal enabledelayedexpansion
::just a sample adapter here:
set "adapter=Ethernet adapter VirtualBox Host-Only Network"
set adapterfound=false
echo Network Connection Test
for /f "usebackq tokens=1-2 delims=:" %%f in (`ipconfig /all`) do (
    set "item=%%f"
    if /i "!item!"=="!adapter!" (
        set adapterfound=true
    ) else if not "!item!"=="!item:IP Address=!" if "!adapterfound!"=="true" (
        echo Your IP Address is: %%g
        set adapterfound=false
    )
)

27voto

OptekProduction Points 201

Dans Windows 7 :

for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set ip=%%b
set ip=%ip:~1%
echo %ip%
pause

22voto

@echo off

FOR /F "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i

echo Your IP Address is: %localIp%

16voto

indiv Points 7403

L'extraction de l'adresse en elle-même est un peu difficile, mais vous pouvez obtenir facilement la ligne entière de l'adresse IP.

Pour afficher toutes les adresses IP sur n'importe quel système d'exploitation Windows de langue anglaise :

ipconfig | findstr /R /C:"IP.* Address"

Pour afficher uniquement les adresses IPv4 ou IPv6 sous Windows 7+ :

ipconfig | findstr /R /C:"IPv4 Address"

ipconfig | findstr /R /C:"IPv6 Address"

Voici quelques exemples de résultats obtenus sur une machine XP avec 3 adaptateurs réseau.

        IP Address. . . . . . . . . . . . : 192.168.1.10
        IP Address. . . . . . . . . . . . : 10.6.102.205
        IP Address. . . . . . . . . . . . : 192.168.56.1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X