I'm currently having a hard time figuring out how to get the active interface names as a variable output which can be later on used in the code.
I've been reading here a bit, how to use the cmd output as a variable, but I need the specific names which are active.
My current code:
@echo off
netsh interface show interface
FOR /F "tokens=* USEBACKQ" %%F IN (`netsh interface show interface`) DO (
SET var=%%F
)
ECHO %var%
Pause
Which displays this image:
We can see that due to
netsh interface show interface
, two connected interfaces and two non connected are shown. However, how do i get f.ex.
Ethernet 2 and WiFi as a variable only like %%V ?
to get the names of all interfaces that are connected:
FOR /F "tokens=3,*" %%A IN ('netsh interface show interface^|find "Connected"') DO echo %%B
Note: this is language dependent.
For a language independent solution use wmic
(which has it's own traps and oddities):
for /f "tokens=2 delims==" %%a in ('wmic nic where (NetConnectionStatus^=2^) get name /value') do (
for /f "delims=" %%b in ("%%a") do echo %%b
)
The inner for
is to handle the ugly wmic
line endings
Because the output of WMIC has the 'ugly' <CR><CR><LF>
line endings and the value of NetConnectionID
will often have unwanted trailing spaces, I'd suggest something more like this to retrieve only connected network adapters as variables:
@Echo Off
Set "i=0"
For /F "Skip=1Delims=" %%A In (
'WMIC NIC Where "NetConnectionStatus=2" Get NetConnectionID'
) Do For /F "Delims=" %%B In ("%%A") Do Call :Sub %%B
Set NIC[
Timeout -1
Exit/B
:Sub
Set/A i+=1
Set "NIC[%i%]=%*"