Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Batch Script auslesen von einer Mac Addresse unter XP geht es unter W7 nicht

Frage Entwicklung Batch & Shell

Mitglied: nixis22

nixis22 (Level 1) - Jetzt verbinden

20.01.2011 um 18:11 Uhr, 7298 Aufrufe, 16 Kommentare

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:

01.
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 
02.
echo %MACA% 
03.
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:
01.
C:\WINNT>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE "Ne 
02.
tConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') do 
03.
set MACA=%a%b%c%d%e%f 
04.
 
05.
C:\WINNT>set MACA=001C42E75E** 
06.
 
07.
C:\WINNT>echo 001C42E75E** 
08.
001C42E75E** 
09.
 
10.
C:\WINNT>pause 
11.
Drücken Sie eine beliebige Taste . . .
W7:
01.
C:\Windows>FOR /F "skip=1 tokens=1-6 delims=: " %a in ('WMIC NIC WHERE " 
02.
NetConnectionStatus='2' and NetConnectionID='LAN-Verbindung'" GET MACAddress') d 
03.
o set MACA=%a%b%c%d%e%f 
04.
 
05.
C:\Windows>set MACA=001C42A04F** 
06.
 
07.
 :\Windows>set MACA= 
08.
 
09.
C:\Windows>echo 
10.
ECHO ist eingeschaltet (ON). 
11.
 
12.
C:\Windows>pause 
13.
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
Mitglied: Biber
20.01.2011 um 18:38 Uhr
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
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
Bitte warten ..
Mitglied: nixis22
20.01.2011 um 19:13 Uhr
Hallo Biber,
danke für deine Antwort.

Ich versuche es aus meiner Sicht wie ich es zur Zeit verstehe mal zu erklären, wenn ich auf demHolzweg bin lasse ich gerne korrigieren.

WMIC NIC WHERE \"NetConnectionStatus=\'2\' and NetConnectionID=\'LAN-Verbindung\'\" GET MACAddress

Ergibt:
MACAddress
xx:yy:xx:yy:xx:yy
weil:
NetConnectionStatus=\'2\' -> aktive Netzwerkkarte
NetConnectionID=\'LAN-Verbindung -> DIe Netzwerkkarte mit dem Namen [Lan-Verbindung]
GET MACAddress -> holt den Wert mit der MAC Adresse

Mit der FOR Schleife
[Skip=1] lasse ich die erste Zeile weg
[Tokens=1-6] und [delims=:] schreibe ich die Werte zwischen den : in die Variabeln %a bis %f die Doppelpunkte werden dabei gelöscht.

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.

Philipp
Bitte warten ..
Mitglied: bastla
20.01.2011 um 19:21 Uhr
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 
die Klippe umschiffen.

Grüße
bastla
Bitte warten ..
Mitglied: pieh-ejdsch
20.01.2011 um 19:56 Uhr
moin nixis22,

Ergibt:
MACAddress
xx:yy:xx:yy:xx:yy
weil:
Ergibt es eben nicht!
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 LehrLeerzeile, welche in Redmond als Feature extra für Win 7 in die Ausgabe reingebastelt wurde.

Gruß Phil
Bitte warten ..
Mitglied: bastla
20.01.2011 um 20:02 Uhr
Dann siehst Du die angehängte LehrLeerzeile, welche in Redmond als Feature extra für Win 7 in die Ausgabe reingebastelt wurde.
... "Feature", weil wir damit endlich wieder mal was zum "Drumrumbasteln" haben ...

Grüße
bastla
Bitte warten ..
Mitglied: 60730
20.01.2011 um 20:36 Uhr
Salü,
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]
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


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.....
/edit

Gruß
Bitte warten ..
Mitglied: nixis22
20.01.2011 um 21:10 Uhr
Hallo zusammen,
wow viele Antworten in einer kleinen Zeitspanne, danke!

Ja Windows 7 ist wirklich besser geworden.

Das Leerzeile ist mir wirklich erst aufgefallen als ich die Antwort von pieh-ejdsch gelesen hatte, nur stellt sich mir grad die Frage wie ich die Leerzeile (die mir wirklich wie eine böse Lehrzeile [nicht vertippt] vorkommt) wieder wegbekomme?
Ich hab mir auch eben beim Essen überlegt was die neu eingeführte Leerzeile für eienn Sinn haben sollte, ausser das man wieder etwas drum herum Basteln muss um diese weg zu bekommen.

Die Lösung von TimoBeil habe ich mir eben auch durchgelesen aber ich möchte dann doch erst mal bei dem bleiben womit ich euch seit dem ersten Beitrag auf den "Nerv" gehe, hoffe das iost OK.
Bitte warten ..
Mitglied: pieh-ejdsch
20.01.2011 um 21:19 Uhr
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
Bitte warten ..
Mitglied: Friemler
20.01.2011 um 23:20 Uhr
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 /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
Offen gesagt gefällt mir aber bastla's Lösung besser.

Gruß
Friemler
Bitte warten ..
Mitglied: bastla
20.01.2011 um 23:56 Uhr
... und wollen wir auch nicht außer Acht lassen, dass natürlich Bibers (von nixis22 - BTW: Willkommen im Forum! - noch nicht vollständig reflektierter) Ansatz bereits macht, was er soll ...

Grüße
bastla
Bitte warten ..
Mitglied: Friemler
21.01.2011 um 00:01 Uhr
Richtig! Hatte ich vergessen.

@Biber: Sorry!

Gruß
Friemler
Bitte warten ..
Mitglied: 76109
21.01.2011 um 00:04 Uhr
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
Bitte warten ..
Mitglied: Friemler
21.01.2011 um 00:15 Uhr
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 /OUTPUT:Datei oder >Datei erzeugt wurde (dann im Unicode-Format), ist kein zusätzliches CR zu finden.

Gruß
Friemler
Bitte warten ..
Mitglied: 76109
21.01.2011 um 00:18 Uhr
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
Bitte warten ..
Mitglied: Friemler
21.01.2011 um 00:25 Uhr
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
Bitte warten ..
Mitglied: nixis22
22.01.2011 um 11:07 Uhr
Hallo zusammen,
vielen Dank das ihr mir hier weitergeholfen habt, und ich hab mal wieder gelernt das man noch mehr auf die "Noten" gucken muss um den Fehler zu finden der einem ja fast anspringt.

DIe Lösung von Friemler hab ich nun genommen und diese klappt super! Trotzdem noch mal Danke an alle!

Wünsche euch ein schönes Wochenende.

Philipp
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch Script Editor - Programmvorstellung des Entwicklers (16)

Tipp von wowItsDoge zum Thema Batch & Shell ...

Windows Server
Batch Script bei Start ausführen (3)

Frage von KEFHVDI zum Thema Windows Server ...

LAN, WAN, Wireless
gelöst Cisco DHCP Reservierung mit MAC Addresse (4)

Frage von PharIT zum Thema LAN, WAN, Wireless ...

Batch & Shell
gelöst Mit batch zeilen auslesen (2)

Frage von keksegriller zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...