Batch Ausgabe des LAN-Verbindungsnamen

conf_t

Fleet Admiral Pro
🎅Rätsel-Elite ’12
Registriert
Juni 2008
Beiträge
10.809
Hallo zusammen,

ich möchte den LAN-Verbindungsnamen als Bestandteil eines kleines Skripts auslesen, um entsprechend einen Wert zu setzten. Konkret möchte ich die DHCP-Option DHCP Class ID Information am Client zu setzen (ipconfig /setclassid "LAN-Verbindung2" MyID). Da ja bei jedem PC theoretisch die LAN-Verbindung anders heißten könnte, ab Win8 wäre es ja "Ethernet[2-X]" und bei Windows 7 eben "LAN-Verbindung[2-X]".

Mein Plan, per For-Schleife den ipconfig Wert auslesen und wenn ein entsprechender Werte eingelesen wird, der matcht, soll der Befehl mit dem Namen ausgeführt werden.

Aktuell bin ich soweit (ein paar Hilfseinträge zum Debuggen sind noch drin)

Code:
FOR /F "usebackq tokens=2" %%a IN (`ipconfig`) DO (
      del c:\tmp.txt
      ECHO %%a
      SET  linkname=%%a
      echo %linkname%
      ECHO %linkname% > c:\tmp.txt
      findstr "LAN-Verbindung" c:\tmp.txt && set ipconfig /setclassid "%linkname%" MyID
      findstr "Ethernet" c:\tmp.txt && set ipconfig /setclassid "%linkname%" MyID
)

Da Problem, der Anfangswert von %%a nach dem ersten Durchlauf ist "LAN-Verbindung:". Jetzt wollte ich den Wert einer anderen Variablen übergeben und dort das letzte Zeichen eliminieren, aber innerhalb der FOR-Schleife wird kein SET Befehl angenommen, egal welche Syntax ich teste.

Ich habe das ganze testweise mal reudziert, um den Fehler einzugrenzen und direkt in der CMD ausgeführt. Aber schon hier wird der Variablen stets nur als Wert "." übergeben:
Code:
C:\Windows\system32>FOR /F "usebackq tokens=2" %a IN (`ipconfig`) DO (ECHO %a & set link=%a & ECHO %link%)

C:\Windows\system32>(ECHO LAN-Verbindung:   & set link=LAN-Verbindung:   & ECHO .  )
LAN-Verbindung:
.

C:\Windows\system32>(ECHO DNS-Suffix:   & set link=DNS-Suffix:   & ECHO .  )
DNS-Suffix:
......

Schon mal Danke!
(PS: Ich bin nicht der fitteste im Batch schreiben, aber meistens kriege ich irgendwann hin was ich will.)
 
Zuletzt bearbeitet:
ipconfig lässt sich wegen der großen Anzahl unnötiger Zeilen nur schlecht parsen.
Besser geht's bis Windows 7 per netsh:
netsh interface ipv4 show interfaces
Ab Windows 8 per Powershell:
Get-NetAdapter -physical | where status -eq 'up'
 
Danke, mit FOR /F "usebackq tokens=5" %a IN (`netsh interface ipv4 show interfaces`) DO .... komme ich dann ja auf die gleiche Ausgabe, leider ist da ja nicht mein eigentliches Problem, aber danke für den Hinweis, macht das ganze etwas effizienter.

Gut, durch die Vereinfachung konnte ich mir die Übergabe sparen, was es einfacher macht. Sieht nun so aus und scheint zu funktionieren.
Code:
@echo off &setlocal enabledelayedexpansion
for /f "usebackq skip=3 tokens=5 "  %%a IN (`netsh interface ipv4 show interfaces`) do (

      DEL c:\tmp.txt
      ECHO %%a > c:\tmp.txt
      findstr "LAN-Verbindung" c:\tmp.txt && ipconfig /setclassid "%%a" MyID
 
)
 
Zuletzt bearbeitet:
Zurück
Oben