Je dois vérifier mon adresse IP toutes les 10 minutes et l'écrire dans un fichier csv, si elle a changé. Cependant, j'ai plusieurs cartes réseau en cours d'utilisation. Comment puis-je obtenir l'adresse IP d'une carte spécifique dans CMD en utilisant son adresse MAC?
Voir ci-dessous pour la modification de la réponse à une autre question de @mousio a>. Cela n'a pas fonctionné pour moi!
Ethernet adapter Ethernet 3: Connection-specific DNS Suffix . : xyz.xyz.com Description . . . . . . . . . . . : Intel(R) 82579LM Gigabit Network Connection Physical Address. . . . . . . . . : 11-11-11-11-11-11 DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : 1111::1111:1111:1111:111111(Preferred) IPv4 Address. . . . . . . . . . . : 111.11.11.11(Preferred) Subnet Mask . . . . . . . . . . . : 111.111.1.1 Lease Obtained. . . . . . . . . . : Thursday, July 25, 2019 9:51:30 AM Lease Expires . . . . . . . . . . : Monday, August 26, 2019 12:33:23 PM Default Gateway . . . . . . . . . : 111.11.1.1 DHCP Server . . . . . . . . . . . : 111.11.11.11 DHCPv6 IAID . . . . . . . . . . . : 111111111 DHCPv6 Client DUID. . . . . . . . : 11-11-11-11-11-11-11-11-11-11-11-11-11-11 DNS Servers . . . . . . . . . . . : 111.11.11.11 111.11.11.11 NetBIOS over Tcpip. . . . . . . . : Enabled
Voir ci-dessous une partie de la réponse pour ipconfig / all
@echo off setlocal enabledelayedexpansion set "MAC1=Physical Address" set "MAC2=11-11-11-11-11-11" set MACfound=false for /f "usebackq tokens=1-2 delims=:" %%f in (`ipconfig /all`) do ( set "item1=%%f" set "item2=%%g" if /i "!item1!"=="!MAC1!" if "!item2!"=="!MAC2!" ( set MACfound=true ) else if not "!item1!"=="!item:IPv4 Address=!" if "!MACfound!"=="true" ( echo Your IP Address is: %%g set MACfound=false ) )
3 Réponses :
IPconfig
est difficile à analyser car les informations nécessaires sont réparties sur plusieurs lignes. Utilisez les bons outils. Je recommande wmic
:
@echo off set parent=%~dp0% CD "%parent%" setlocal enabledelayedexpansion for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a" rem echo All Addresses: %adresses% for %%a in (%adresses%) do ( echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a ) set ip4=%ip4:~1% set ip6=%ip6:~1% echo ip4_address echo %ip4%
Remarque: le format de l'adresse MAC est différent en wmic
(deux points au lieu de tirets). N'oubliez pas d'échapper au =
.
Edit: pour séparer les adresses IPv4 et IPv6, il suffit de diviser la chaîne avec un autre pour boucle:
@echo off echo -- IP ADDRESS UPDATER, PLEASE DO NOT CLOSE! -- set parent=%~dp0% CD "%parent%" setlocal enabledelayedexpansion for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a" for %%a in (%adresses%) do ( echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a ) set ip4_old=%ip4:~1% set ip6_old=%ip6:~1% set "ip4=%ip4*=%" set "ip6=%ip6*=%" call ip_writer > ip_file.csv :loop for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a" for %%a in (%adresses%) do ( echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a ) set ip4_new=%ip4:~1% set ip6_new=%ip6:~1% set "ip4=%ip4*=%" set "ip6=%ip6*=%" if not "%ip4_new%"=="%ip4_old%" ( call ip_writer > ip_file.csv set ip4_old=%ip4_new% ) set "ip4_new=%ip4*=%" timeout 600 /nobreak > nul goto loop
Edit (par Mosy): Code pour accomplir toutes les tâches requises, c'est-à-dire écrire l'adresse IP dans un fichier csv et mettre à jour toutes les 10 minutes s'il a changé:
En gros, il y aura deux fichiers batch dans le même chemin, le premier s'appelle ip_main.bat et contient:
@echo off setlocal enabledelayedexpansion for /f "tokens=2 delims={}" %%a in ('wmic nicconfig where MACAddress^="11:11:11:11:11:11" get IPAddress /value') do set "adresses=%%a" echo All Addresses: %adresses% for %%a in (%adresses%) do ( echo %%~a|find "." >nul && set "ip4=!ip4!,%%~a echo %%~a|find ":" >nul && set "ip6=!ip6!,%%~a ) echo IPv4-Address(es): %ip4:~1% echo IPv6-Address(es): %ip6:~1%
@stephen J'ai fait ça mais j'obtiens bot IPv4 et (je suppose) IPv6 par exemple 111.11.11.11 "," aa11 :: a111: 1aaa: aaa8: a1a1 Comment puis-je les obtenir en deux variables séparées?
merci beaucoup c'est ce que je voulais. J'ai modifié votre réponse pour ajouter toutes les autres tâches requises au cas où quelqu'un d'autre voudrait faire la même chose et aurait besoin d'un indice.
Voici une autre façon de procéder.
FOR /F "tokens=1-2" %%A IN ('powershell -NoLogo -NoProfile -Command ^ "Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration |" ^ "Where-Object { $_.MACAddress -match '11:11:11:11:11:11' } |" ^ "ForEach-Object { '{0} {1}' -f $_.IPAddress[0], $_.IPAddress[1] }"') DO ( SET "IPV4ADDR=%%~A" SET "IPV6ADDR=%%~B" ) ECHO IPV4ADDR is %IPV4ADDR% ECHO IPV6ADDR is %IPV6ADDR%
Merci, c'est une solution intéressante
Obtenir un Ip local depuis Mac
setlocal enabledelayedexpansion set "i=0" for /f "tokens=2 delims={} skip=1" %%i in ('wmic nicconfig get IPAddress /value' ) do ( echo %%i|find "." >nul && set "ip4[!i!]=%%i set /a "i+=1" ) set /a "i-=1" for /l %%a in (0,1,%i%) do ( set ip4ip6=!ip4[%%a]!" for /f tokens^=1^,2^,3^ delims^=^" %%a in (!ip4ip6!) do ( set temp=%%a set tempMac=%%c ) if "!temp:~0,12!" equ "192.168.137." ( set localIp=!temp! set localMac=!tempMac! ) else if "!temp:~0,8!" equ "127.0.0." ( set localIp=!temp! set localMac=!tempMac! ) else if "!temp:~0,12!" equ "Some.else.IP." ( set localIp=!temp! set localMac=!tempMac! ) ) echo ----%localIp%----- echo ----%localMac%-----
Obtenir un Mac depuis un Ip local
setlocal enabledelayedexpansion set Mac=hy80::c1sd:6452:4t5:d574 set "i=0" for /f "tokens=2 delims={} skip=1" %%i in ('wmic nicconfig get IPAddress /value' ) do ( echo %%i|find "." >nul && set "ip4[!i!]=%%i set /a "i+=1" ) set /a "i-=1" for /l %%a in (0,1,%i%) do ( set ip4ip6=!ip4[%%a]!" for /f tokens^=1^,2^,3^ delims^=^" %%a in (!ip4ip6!) do ( set temp=%%a set tempMac=%%c ) if "!Mac!" equ "!tempMac!" ( set localMac=!tempMac! set localIp=!temp! ) ) echo ----%localIp%----- echo ----%localMac%-----
Это на SU, superuser.com/questions/ 19992 /…
@ lucifer63 merci pour votre suggestion, cela ne répond pas à ma question!