Batch Script auslesen von einer Mac Addresse unter XP geht es unter W7 nicht
Hallo,
ich habe ein Batch Script welches unter XP die MAC Adresse abfragt, die Abfrage findet in einer FOR /F Schleife statt, unter Windows XP funktioniert dies ohne Probleme unter Windows 7 geht dies zwar auch, aber bevor das Script beendet wird wird die Varieble %MACA% durch set MACA= überschrieben.
Hallo Administrator Team,
ich hab schon ziemlich lange nach dem Problem hier im Forum gesucht, und hoffe dennoch das ich keinen Doppelpost führe.
Die MAC Addressen habe ich am Ende mit zwei ** verfälscht, also bitte nicht als Fehler ansehen
Wie im Vorwort beschrieben funktioniert das Script unter XP ohne Probleme:
Es ist relativ simpel gehalten aber es tut seine Dienste.
Unter XP wird mir dann also ECHO die MAC Adresse ohne ":" ausgegeben.
Wenn ich dieses Script nun unter Windows 7 laufe lasse findet er auch die MAC, trennt per DELIMS die Doppepunkte heraus und fügt die MAC in die Variable %MACA% ein, aber nachdem er die MAC in die Variable geschrieben hat folg ein "MACA=" und dann ist diese ja sozusagen wieder leer, und hier weis ich absolut nicht wieso.
Hier die Script Outputs in der Konsole mit @echo on:
XP:
W7:
Wie man sehr gut in Zeile 7 sehen kann ist hier das " :\Windows>set MACA=" zuviel und macht die Varieblae wieder leer
Kann hier jemand Helfen? Ich weis wirklich nicht mehr weiter wieso bei W7 das zweite set stattfindet.
Danke und Gruß aus Köln
Philipp
ich habe ein Batch Script welches unter XP die MAC Adresse abfragt, die Abfrage findet in einer FOR /F Schleife statt, unter Windows XP funktioniert dies ohne Probleme unter Windows 7 geht dies zwar auch, aber bevor das Script beendet wird wird die Varieble %MACA% durch set MACA= überschrieben.
Hallo Administrator Team,
ich hab schon ziemlich lange nach dem Problem hier im Forum gesucht, und hoffe dennoch das ich keinen Doppelpost führe.
Die MAC Addressen habe ich am Ende mit zwei ** verfälscht, also bitte nicht als Fehler ansehen
Wie im Vorwort beschrieben funktioniert das Script unter XP ohne Probleme:
FOR /F "skip=1 tokens=1-6 delims=: " %%a in ('WMIC NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') do set MACA=%%a%%b%%c%%d%%e%%f
echo %MACA%
pause
Es ist relativ simpel gehalten aber es tut seine Dienste.
Unter XP wird mir dann also ECHO die MAC Adresse ohne ":" ausgegeben.
Wenn ich dieses Script nun unter Windows 7 laufe lasse findet er auch die MAC, trennt per DELIMS die Doppepunkte heraus und fügt die MAC in die Variable %MACA% ein, aber nachdem er die MAC in die Variable geschrieben hat folg ein "MACA=" und dann ist diese ja sozusagen wieder leer, und hier weis ich absolut nicht wieso.
Hier die Script Outputs in der Konsole mit @echo on:
XP:
C:\WINNT>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE "Ne
tConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') do
set MACA=%a%b%c%d%e%f
C:\WINNT>set MACA=001C42E75E**
C:\WINNT>echo 001C42E75E**
001C42E75E**
C:\WINNT>pause
Drücken Sie eine beliebige Taste . . .
W7:
C:\Windows>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE "
NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') d
o set MACA=%a%b%c%d%e%f
C:\Windows>set MACA=001C42A04F**
:\Windows>set MACA=
C:\Windows>echo
ECHO ist eingeschaltet (ON).
C:\Windows>pause
Dr??n Sie eine beliebige Taste . . .
Wie man sehr gut in Zeile 7 sehen kann ist hier das " :\Windows>set MACA=" zuviel und macht die Varieblae wieder leer
Kann hier jemand Helfen? Ich weis wirklich nicht mehr weiter wieso bei W7 das zweite set stattfindet.
Danke und Gruß aus Köln
Philipp
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159091
Url: https://administrator.de/contentid/159091
Ausgedruckt am: 26.11.2024 um 22:11 Uhr
16 Kommentare
Neuester Kommentar
Moin nixis22,
willkommen im Forum.
Um nachfolgenden Kommentaren etwas die Schärfe zu nehmen, drei Tipps.
a) ersetze in den Skripten, nein in dem EINEN Skript das [set MACA=%a%b%c%d%e%f ] durch ein [if not defined MACA set MACA=%a%b%c%d%e%f ]
b) verwende niemals Oneliner, bei denen du die erste Zeile nicht verstehst
c) Informiere dich, wie du die Ausgabe des Befehls
Möglicherweise kommt gleich noch ein Kollege namens T-Mo hier vorbei und erklärt es ausführlich.
Grüße
Biber
willkommen im Forum.
Um nachfolgenden Kommentaren etwas die Schärfe zu nehmen, drei Tipps.
a) ersetze in den Skripten, nein in dem EINEN Skript das [set MACA=%a%b%c%d%e%f ] durch ein [if not defined MACA set MACA=%a%b%c%d%e%f ]
b) verwende niemals Oneliner, bei denen du die erste Zeile nicht verstehst
c) Informiere dich, wie du die Ausgabe des Befehls
WMIC NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress
... auf Win Xp und Win 7 mal auf ein CMD-Fenster projezieren kannst.Möglicherweise kommt gleich noch ein Kollege namens T-Mo hier vorbei und erklärt es ausführlich.
Grüße
Biber
das Ersetzen von [set MACA=%a%b%c%d%e%f ] in [if not defined MACA set MACA=%a%b%c%d%e%f ] erzielt das selbe Ergebnis nur das in (Zeile 7) statt [set] nun [if not defined MACA set MACA=] da steht
... wobei aber noch die Schlussfolgerung daraus fehlt (dann hättest Du nämlich den "jumping point" gefunden ) ...Ansonsten könntest Du natürlich auch zB mit
FOR /F "tokens=1-6 delims=: " %%a in ('WMIC NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress^|findstr ":"') do set MACA=%%a%%b%%c%%d%%e%%f
Grüße
bastla
moin nixis22,
Windows 7 ist ja nicht nur "Besser" gemacht - sondern ganz und gar anders gestrickt.
im Zweifelsfall solltest Du erstmal die genaue Ausgabe des "WMIC ..." Überprüfen, indem Du an diesen Befehl ein "& echo Ausgabe fertig..." dranhägst und in der CMD ausführst.
Dann siehst Du die angehängteLehrLeerzeile, welche in Redmond als Feature extra für Win 7 in die Ausgabe reingebastelt wurde.
Gruß Phil
Ergibt:
MACAddress
xx:yy:xx:yy:xx:yy
weil:
Ergibt es eben nicht!MACAddress
xx:yy:xx:yy:xx:yy
weil:
Windows 7 ist ja nicht nur "Besser" gemacht - sondern ganz und gar anders gestrickt.
im Zweifelsfall solltest Du erstmal die genaue Ausgabe des "WMIC ..." Überprüfen, indem Du an diesen Befehl ein "& echo Ausgabe fertig..." dranhägst und in der CMD ausführst.
Dann siehst Du die angehängte
Gruß Phil
Salü,
Möglicherweise kommt es anders, als man denkt..^Merci 4 die Blumen trotzdem
[/OT]
demo an cmd Prompt:
Von daher würde ich den bezeichneten Weg gar nicht gehen wollen.
edit
Gruß
Zitat von @Biber:
Moin nixis22,
willkommen im Forum.
Möglicherweise kommt gleich noch ein Kollege namens T-Mo hier vorbei und erklärt es ausführlich.
[OT]Moin nixis22,
willkommen im Forum.
Möglicherweise kommt gleich noch ein Kollege namens T-Mo hier vorbei und erklärt es ausführlich.
Möglicherweise kommt es anders, als man denkt..^Merci 4 die Blumen trotzdem
[/OT]
demo an cmd Prompt:
C:\>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE "NetConnectionSt
atus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') do set MACA=%a%b
%c%d%e%f
MOF-Datei(en) konnte(n) nicht registriert werden.
Nur Mitglieder der Administratorgruppe können WMIC.EXE verwenden.
Ursache:Win32-Fehler: Zugriff verweigert
Ursache:Win32-Fehler: Zugriff verweigert
Von daher würde ich den bezeichneten Weg gar nicht gehen wollen.
edit
- hüstel
- Die bis gerade eben noch beschriebene Demo war ein Satz mit X.....
Gruß
moin Timo,
das komische ist; dass es in einer Batch, welche bei mir rumdümpelte, richtig funktionierte mit der Arp-Ausgabe.
schreib ich ne neue Batch (ist aber genauso eine .cmd wie die andere) dann geht es nicht!? Kopfkratz...?
[Edit]
Komentar hinfällig, da die Mac-Adresse in der genannten Batch mittels "ipconfig /all" ausgelesen wurde.
Man - Ich werd alt!
[/Edit]
Gruß Phil
schreib ich ne neue Batch (ist aber genauso eine .cmd wie die andere) dann geht es nicht!? Kopfkratz...?
[Edit]
Komentar hinfällig, da die Mac-Adresse in der genannten Batch mittels "ipconfig /all" ausgelesen wurde.
Man - Ich werd alt!
[/Edit]
Gruß Phil
Hallo nixis22,
bastla hat ja schon eine Methode vorgestellt, um Dein Problem zu lösen (die Ausgabe von WMIC über eine Pipe an FINDSTR weiterleiten, was dann nur noch Zeilen anzeigt, die Doppelpunkte enthalten -> die Zeile mit der MAC-Adresse; SKIP=1 muss dann weggelassen werden).
Ich habe gerade auch etwas herum experimentiert. Das Problem scheint zu sein, dass WMIC eigentlich Daten im Unicode-Format ausgibt. Zumindest tut es das, wenn man die Ausgabe mit dem Parameter
Der TYPE-Befehl kann auch Unicode-Dateien in ASCII wandeln, sodass sie auf der Kommandozeile korrekt angezeigt werden. Folgender Befehl liefert auch das richtige Ergebnis:
Offen gesagt gefällt mir aber bastla's Lösung besser.
Gruß
Friemler
bastla hat ja schon eine Methode vorgestellt, um Dein Problem zu lösen (die Ausgabe von WMIC über eine Pipe an FINDSTR weiterleiten, was dann nur noch Zeilen anzeigt, die Doppelpunkte enthalten -> die Zeile mit der MAC-Adresse; SKIP=1 muss dann weggelassen werden).
Ich habe gerade auch etwas herum experimentiert. Das Problem scheint zu sein, dass WMIC eigentlich Daten im Unicode-Format ausgibt. Zumindest tut es das, wenn man die Ausgabe mit dem Parameter
/OUTPUT:Datei
oder mit >Datei
in eine Datei umleitet (bei /OUTPUT:CON
sieht man sogar, das Multibyte-Zeichen und am Anfang eine Byte Order Mark [BOM] für UTF-16 LE ausgegeben werden!). In dieser Datei ist auch die zusätzliche Leerzeile nicht zu finden. Anscheinend hat CMD eine interne Konvertierungsroutine für Unicode-Ausgaben, die nicht richtig funktioniert und eine Zeile erzeugt, die nicht mit einem Standard-Zeilenende (CR+LF) sondern nur mit CR endet. Deshalb ist die zweite Ausgabe des SET-Befehls am Anfang auch verstümmelt (der Laufwerksbuchstabe des Prompts fehlt ja). FOR erkennt das nicht als leere Zeile und führt den Schleifenkörper zweimal aus.Der TYPE-Befehl kann auch Unicode-Dateien in ASCII wandeln, sodass sie auf der Kommandozeile korrekt angezeigt werden. Folgender Befehl liefert auch das richtige Ergebnis:
FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC /Output:wmicout.txt NIC WHERE "NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress ^& type wmicout.txt ^& del wmicout.txt') do set maca=%a%b%c%d%e%f
Gruß
Friemler
Hallo @all
Die Ausgabe von WMIC ist Unicode und die Forschleife gibt das hier aus:
MACAddress + CR + CR + LF
6B:xx:xx:xx:D4 + CR + LF
Gruß Dieter
Die Ausgabe von WMIC ist Unicode und die Forschleife gibt das hier aus:
MACAddress + CR + CR + LF
6B:xx:xx:xx:D4 + CR + LF
Gruß Dieter
Hallo Dieter,
nein, Unicode ist es nicht, aber der Murks, den Deine Forschungen an den Tag gebracht haben, ist wahrscheinlich das Ergebnis einer Konvertierung Unicode->ASCII seitens CMD, evtl. auch WMIC selbst. In einer Datei, die durch
Gruß
Friemler
nein, Unicode ist es nicht, aber der Murks, den Deine Forschungen an den Tag gebracht haben, ist wahrscheinlich das Ergebnis einer Konvertierung Unicode->ASCII seitens CMD, evtl. auch WMIC selbst. In einer Datei, die durch
/OUTPUT:Datei
oder >Datei
erzeugt wurde (dann im Unicode-Format), ist kein zusätzliches CR zu finden.Gruß
Friemler
Hallo Friemler!
Also im Hex-Editor stehen in den ersten beiden Bytes FF FE (Unicode, UTF16?). Ob das jetzt die CMD so hinbiegt, keine Ahnung?
Gruß Dieter
Also im Hex-Editor stehen in den ersten beiden Bytes FF FE (Unicode, UTF16?). Ob das jetzt die CMD so hinbiegt, keine Ahnung?
Gruß Dieter
Hallo Dieter,
richtig, das FF FE ist die Byte Order Mark (BOM) für UTF-16 Little Endian (für Big Endian wäre es FE FF, für UTF-8 EF BB BF). Daran können Texteditoren erkennen, dass es sich um eine entsprechend codierte Unicode-Datei handelt. Na ja, und irgendwer muss die Konvertierung bei Ausgabe auf der Konsole ja machen, CMD oder WMIC selbst. Einer der beiden baut Mist.
Gruß
Friemler
richtig, das FF FE ist die Byte Order Mark (BOM) für UTF-16 Little Endian (für Big Endian wäre es FE FF, für UTF-8 EF BB BF). Daran können Texteditoren erkennen, dass es sich um eine entsprechend codierte Unicode-Datei handelt. Na ja, und irgendwer muss die Konvertierung bei Ausgabe auf der Konsole ja machen, CMD oder WMIC selbst. Einer der beiden baut Mist.
Gruß
Friemler