eth0-r
Goto Top

Saubere Variable für Netzwerkinterface

Guten morgen zusammen,

ich habe da eine kleines Problem mit der Weiterverarbeitung einer übergebenen Variable.
Ich brauche für die Weiterverarbeitung den Namen des Netzwerkadapters. Da es sich aber um viele verschieden Systeme handelt stoße ich auch auf Verschiedene Rückgabewerte. "LAN-Verbindung", "LAN-Verbindung 2" usw. und wenn ich auf das 2te Token stoße bekomme ich immer ein Leichtes problem, da es mir entweder fehlt oder mir wenn es n nicht vorhanden ist n <space> welches ich da nicht gebrauchen kann reinballert.

meine Lösungsansätze sehen im Moment wiefolgt aus.

echo off & setlocal

	::Ermittlung des Adapternamen
	for /f "tokens=2,3 delims=:" %%i in ('ipconfig^|find "Ethernetada"^|find /v "Drah"^|find /v "1394"') do set LANtmp=%%i  
	for /f "tokens=2,3 delims=:" %%i in ('ipconfig^|find "Ethernetada"^|find /v "Drah"^|find /v "1394"') do set LANtmp2=%%i %%j  
	::Anpassung der Variable
	set LAN=%LANtmp::=%
        set LAN2=%LANtmp2::=%

	@echo ##############################################
	@Echo Festlegen des primaeren DNS-Server 10.16.2.222
	@echo ##############################################
	netsh interface ip set dns name="%LAN%" static 10.16.2.222>nul  
	netsh interface ip set dns name="%LAN2%" static 10.16.2.222   
	@echo ################################################
	@echo Festlegen des sekundaeren DNS-Server 10.16.2.223
	@echo ################################################
	netsh interface ip add dns name="%LAN%" 10.16.2.223>nul  
	netsh interface ip add dns name="%LAN2%" 10.16.2.223  

oder

	::Ermittlung des Adapternamen
	for /f "tokens=4,5" %%i in ('netsh interface ip show config^|find """"^|find /v "Drah"^|find /v "1394"') do set LANtmp1=%%i %%j  
	for /f "tokens=4" %%i in ('netsh interface ip show config^|find """"^|find /v "Drah"^|find /v "1394"') do set LANtmp2=%%i  

	set LAN1=%LANtmp1:"=%  
	set LAN2=%LANtmp2:"=%  
	echo.
	echo NIC = %LAN1%
	echo.
	@echo ##############################################
	@Echo Festlegen des primaeren DNS-Server 10.16.2.222
	@echo ##############################################
	netsh interface ip set dns name="%LAN1%" static 10.16.2.222>nul  
	netsh interface ip set dns name="%LAN2%" static 10.16.2.222  
 
	@echo ################################################
	@echo Festlegen des sekundaeren DNS-Server 10.16.2.223
	@echo ################################################
	netsh interface ip add dns name="%LAN1%" 10.16.2.223>nul  
	netsh interface ip add dns name="%LAN2%" 10.16.2.223  

Problem ist halt: Lese ich mit 4,5 aus bekomme ich "LAN-Verbindung " zurück andersrum fehlt mir beim auslesen mit nur 4 von "LAN-Verbdung 2" dann später 2

Habt ihr viell. ne Möglichkeit die Variable immer sauber übergeben zu bekommen?

MFG
Marcel

Content-ID: 161059

Url: https://administrator.de/contentid/161059

Ausgedruckt am: 17.11.2024 um 05:11 Uhr

bastla
bastla 18.02.2011 um 09:49:13 Uhr
Goto Top
Hallo eTh0-R!

Versuch es so:
for /f "tokens=3*" %%i in ('netsh interface ip show config^|find """"^|find /v "Drah"^|find /v "1394"') do set "LANtmp2=%%~j"
Mit der Verwendung von "%%~j" kannst Du ein Paar Anführungszeichen schon vorweg eliminieren (das andere Paar könntest Du dann eigentlich auch belassen - gerade, um auch für Namen mit Leerzeichen vorzusorgen; allerdings tendiere ich grundsätzlich auch eher dazu, Anführungszeichen erst dann zu setzen, wenn sie tatsächlich benötigt werden und sie daher vorweg nicht in die Variable "mitzunehmen") ...

Grüße
bastla
eTh0-R
eTh0-R 18.02.2011 um 10:24:21 Uhr
Goto Top
Außer einem fetten DANKE bleibt mir da nicht weiteres zu sagen.

Tut was es soll....


MFG
Biber
Biber 18.02.2011 um 12:01:56 Uhr
Goto Top
Moin eTh0-R,

Zitat von @eTh0-R:
Außer einem fetten DANKE bleibt mir da nicht weiteres zu sagen.
Hmmm....aber vielleicht noch etwas zu tun...?

Schu doch mal oben auf den weissen Fleck unmittelbar nach dem Beitragstitel...
... da wo viele andere andere Beitragsersteller ein Zeichen in Form und Farbe einer geknickten Wanderheuschrecke angepappt haben...

Schönes Wochenende
Biber
benpunkt
benpunkt 27.09.2011 um 14:37:29 Uhr
Goto Top
Das wäre genau, was ich brauche! Leider funktioniert das Script bei mir nicht...
%%i kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Ich brauch eine Variable für die ersten beiden Netzwerkkarten eines Clients. Mithilfe dieser Variable möchte ich zwei netsh Befehle ausführen... (Adressen automatisch beziehen, DHCP)
Clients können XP, VISTA oder Windows 7 sein

Könnt Ihr mit helfen?
bastla
bastla 27.09.2011 um 14:44:33 Uhr
Goto Top
Hallo Ben.it!

Du hast die entsprechende Zeile als Teil eines Batches verwendet?

Grüße
bastla
benpunkt
benpunkt 27.09.2011 um 14:47:08 Uhr
Goto Top
Erstmal habe ich einfach die Zeile einzeln eingegeben:
for /f "tokens=3*" %%i in ('netsh interface ip show config^|find """"^|find /v "Drah"^|find /v "1394"') do set "LANtmp2=%%~j"

Mit der Meldung: %%i kann syntaktisch an dieser Stelle nicht verarbeitet werden.
bastla
bastla 27.09.2011 um 14:57:22 Uhr
Goto Top
Hallo Ben.it!

Direkt in der CMD-Shell für die Schleifenvariablen immer einzelne Prozentzeichen verwenden ...

Grüße
bastla
benpunkt
benpunkt 27.09.2011 um 15:08:08 Uhr
Goto Top
Hi Bastla,

also als Batch gehts?
Kannst Du mir hier sagen, was ich falsch mache? Ich habe das Script etwas angepasst....


for /f "tokens=3*" %%i in ('netsh interface ip show config^ | find """"^ | find /v "Drah"^ | find /v "1394"') do set "LANtmp2=%%~j"

set LAN1=%LANtmp1:"=%
set LAN2=%LANtmp2:"=%

echo NIC = %LAN1%

netsh interface ip set address name="%LAN1%" source=dhcp
netsh interface ip set dns name="%LAN2%" source=dhcp


Grüße
bastla
bastla 27.09.2011 um 15:16:33 Uhr
Goto Top
Hallo Ben.it!

Gibt es einen besonderen Grund dafür (nein, nicht dass Du keine Code- benutzt), zuerst die Anführungszeichen um die Namen herum entfernen zu wollen, um sie dann bei
... name="%LAN1%" ...
wieder zu setzen?

Grüße
bastla
benpunkt
benpunkt 27.09.2011 um 15:17:44 Uhr
Goto Top
ähm, nein... ich habe es vom eTh0-R abkopiert und angepasst...
benpunkt
benpunkt 27.09.2011 um 15:19:22 Uhr
Goto Top
wie gesagt... mir gehts nur darum, dass ich alle Client Netzwerkkarten auf DHCP stellen kann, unabhängig davon, wie die Scchnittstelle heißt...
bastla
bastla 27.09.2011 um 15:24:49 Uhr
Goto Top
Hallo Ben.it!

Dann sollte doch eigentlich etwas in der Art genügen:
for /f "tokens=3*" %%i in ('netsh interface ip show config^|find """"^|find /v "Drah"^|find /v "1394"') do (  
    echo netsh interface ip set address name=%%~j source=dhcp
)
Das "echo" in Zeile 2 dient zum Testen, da so der "netsh"-Befehl nur angezeigt, aber noch nicht ausgeführt wird ...

Grüße
bastla

[Edit] Unnötige Leerzeichen entfernt [/Edit]
benpunkt
benpunkt 27.09.2011 um 15:30:33 Uhr
Goto Top
wenn ich die Batch ausführe, wird das Fenster gleich wieder geschlossen, auch wenn ich sie als Administrator ausführe....
ich bin lokaler Admin auf meinem PC

Funktioniert dass dann auch bei zwei Netzwerkkarten? Wenn ein Mitarbeiter mit einem Laptob arbeitet (LAN/WLAN?)

Grüße
bastla
bastla 27.09.2011 um 15:34:37 Uhr
Goto Top
Hallo Ben.it!

Vorher testetst Du (richtiger Weise) in der CMD-Shell, und jetzt per Doppelklick? Dann füge eben noch eine Zeile
pause
hinzu ...
Funktioniert dass dann auch bei zwei Netzwerkkarten?
Wenn "netsh" Ausgaben für beide liefert ...

Grüße
bastla
benpunkt
benpunkt 27.09.2011 um 15:50:22 Uhr
Goto Top
sorry, entweder stell ich mich einfach zu blöd an oder wir haben da einfach grundlegend etwas falsch drin...

egal ob Batch oder CMD: ich bekomm meine lokale Netzwerkkarte nicht auf DHCP gestellt mit den Befehlen. face-confused

Im Endeffekt möchte ich ja eine Gruppenrichtlinie erstellen, die beide Netzwerkkarten auf DHCP stellt...
Also im Endeffekt soll es mit Batch laufen.

Wenn ich die Batch ausführe, geschieht jedoch nichts, das Fenster wird gleich wieder geschlossen, auch wenn PAUSE aufgeführt ist face-confused

bei eth0-R scheint es ja wiefolgt funktioniert zu haben:

echo off & setlocal
for /f "tokens=2,3 delims=:" %%i in ('ipconfig^|find "Ethernetada"^|find /v "Drah"^|find /v "1394"') do set LANtmp=%%i
for /f "tokens=2,3 delims=:" %%i in ('ipconfig^|find "Ethernetada"^|find /v "Drah"^|find /v "1394"') do set LANtmp2=%%i %%j
set LAN=%LANtmp::=%
set LAN2=%LANtmp2::=%
netsh interface ip set dns name="%LAN%" static 10.16.2.222>nul
netsh interface ip set dns name="%LAN2%" static 10.16.2.222
benpunkt
benpunkt 27.09.2011 um 15:52:02 Uhr
Goto Top
beziehungsweise:
for /f "tokens=4,5" %%i in ('netsh interface ip show config^|find """"^|find /v "Drah"^|find /v "1394"') do set LANtmp1=%%i %%j
for /f "tokens=4" %%i in ('netsh interface ip show config^|find """"^|find /v "Drah"^|find /v "1394"') do set LANtmp2=%%i

fällt dir nichts ein? Danke für Deine Hilfe!

Grüße
bastla
bastla 27.09.2011, aktualisiert am 18.10.2012 um 18:48:33 Uhr
Goto Top
Hallo Ben.it!
fällt dir nichts ein?
Mir fällt etwas auf - Du bist weiterhin weder willens, Code passend formatiert zu posten, noch scheinst Du verstanden zu haben, was das "echo" in meinem Code-Vorschlag oben bedeutet (und was daher passieren würde, wenn Du es weg lässt) ...

Grüße
bastla
benpunkt
benpunkt 27.09.2011 um 16:21:23 Uhr
Goto Top
Wir kommen hier nicht weiter. Ich schau weiter nach einer Lösung.

Schönen Tag noch!

Grüße