Win XP - Benötige Batch Datei zum Auslesen der Mac Adresse - Mac Adresse mit einer Mac Adressen Tabelle vergleichen - Computernamen aus Tabelle herausfiltern und ins System einpflegen!
Sehr geehrtes Administrator Team,
ich bin seit heute ein neues Mitglied in diesem Forum und freue mich schon drauf in Zukunft mit euch zusammenarbeiten zu können! ^^
Wie Ihr schon aus meinem Titel entnehmen könnt, habe ich ein kleines Problem, wo ich hoffe, dass Ihr mir weiterhelfen könnt.
Ich bräuchte nämlich Hilfe für die Erstellung einer Batch Datei, die folgende Sachen ausführen müsste:
1. Die MAC-Adresse aus dem PC-System auslesen und in ein .txt Dokument abspeichern
--> MAC-Adresse sollte möglichst in der .txt Datei so aussehen:
2.1 Dann soll die ausgelesene MAC-Adresse in der .txt Datei mit einer vorhandenen Tabelle, wo schon MAC-Adressen aufgelistet sind, verglichen werden.
--> Die Tabelle ist als .csv Datei abgespeichert und kann mit openOfice geöffnet werden. Die Tablle sieht dann ungefähr so aus:
Achtung: Das ist nicht die vollständige Liste. Die Liste besteht aus 35 MAC-Adressen mit den jeweiligen zugehörigen Computernamen! Habe nur ein Teil als Screenshot zur
Verfügung gestellt!
2.2 Wenn die ausgelesene MAC-Adresse mit einer MAC-Adresse aus der Tabelle übereinstimmt, dann soll ein bestimmter Computername zugewiesen werden!
--> Dieser Computername soll dann in einer weiter .txt Datei abgespeichert werden, z.B.: Computername.txt
3. Zum Schluss soll der ausgelesene Computername aus der.txt Datei ins System eingepflegt werden
--> Ich habe mir gedacht, dass man das mit demm Programm "Wsname" machen könnte... Das man praktisch per Batch Datei den Computernamen, der in der .txt Datei
drinne steht in das Programm "Wsname" reinkopiert und denen sagt, übernehme diesen Computernamen! Das programm sieht so aus:
Ich habe es schon soweit geschafft, dass ich mir die Physikalische Adresse (MAC-Adresse) von der CMD-Konsole (Shell) in ein.txt Datei reinkopiert bekomme.
Die Batch-Datei sieht dann so aus:
@echo off
SETLOCAL
@set LOG=%COMPUTERNAME%.log
rem @echo. >>%LOG%
@ipconfig /all | findstr /i /C:"Physikalische Adresse" >>%LOG%
@echo. >>%LOG%
rem @notepad.exe %LOG%
ENDLOCAL
Aber die Mac-Adresse wird leider dann so dargestellt:
Möchte gerne nur die eine MAC-Adresse, wie schon oben auf dem Bild unter Punkt 1, in die ganz linke obere Ecke des Dokumentes haben.
Bei den Punkten 2 und 3 komme ich nicht weiter... Ihr müsst wissen, ich bin in dem Gebiet ein Neuling und versuche mich da etwas hineinzufuchsen... ;)
Das ganze hier hängt nämlich mit einer Projektarbeit zusammen, die ich fertigstellen muss... Ich würde mich sehr freuen, wenn ihr mich dabei tatkräftig unterstützen könntet und für mich viele Tipps und Ratschläge parat hättet, wie ich das alles in einer Batch umsetzen könnte! Vielen Dank schon mal im vorraus!
Mit freundlichen Grüßen
cloud-strife20
ich bin seit heute ein neues Mitglied in diesem Forum und freue mich schon drauf in Zukunft mit euch zusammenarbeiten zu können! ^^
Wie Ihr schon aus meinem Titel entnehmen könnt, habe ich ein kleines Problem, wo ich hoffe, dass Ihr mir weiterhelfen könnt.
Ich bräuchte nämlich Hilfe für die Erstellung einer Batch Datei, die folgende Sachen ausführen müsste:
1. Die MAC-Adresse aus dem PC-System auslesen und in ein .txt Dokument abspeichern
--> MAC-Adresse sollte möglichst in der .txt Datei so aussehen:
2.1 Dann soll die ausgelesene MAC-Adresse in der .txt Datei mit einer vorhandenen Tabelle, wo schon MAC-Adressen aufgelistet sind, verglichen werden.
--> Die Tabelle ist als .csv Datei abgespeichert und kann mit openOfice geöffnet werden. Die Tablle sieht dann ungefähr so aus:
Achtung: Das ist nicht die vollständige Liste. Die Liste besteht aus 35 MAC-Adressen mit den jeweiligen zugehörigen Computernamen! Habe nur ein Teil als Screenshot zur
Verfügung gestellt!
2.2 Wenn die ausgelesene MAC-Adresse mit einer MAC-Adresse aus der Tabelle übereinstimmt, dann soll ein bestimmter Computername zugewiesen werden!
--> Dieser Computername soll dann in einer weiter .txt Datei abgespeichert werden, z.B.: Computername.txt
3. Zum Schluss soll der ausgelesene Computername aus der.txt Datei ins System eingepflegt werden
--> Ich habe mir gedacht, dass man das mit demm Programm "Wsname" machen könnte... Das man praktisch per Batch Datei den Computernamen, der in der .txt Datei
drinne steht in das Programm "Wsname" reinkopiert und denen sagt, übernehme diesen Computernamen! Das programm sieht so aus:
Ich habe es schon soweit geschafft, dass ich mir die Physikalische Adresse (MAC-Adresse) von der CMD-Konsole (Shell) in ein.txt Datei reinkopiert bekomme.
Die Batch-Datei sieht dann so aus:
@echo off
SETLOCAL
@set LOG=%COMPUTERNAME%.log
rem @echo. >>%LOG%
@ipconfig /all | findstr /i /C:"Physikalische Adresse" >>%LOG%
@echo. >>%LOG%
rem @notepad.exe %LOG%
ENDLOCAL
Aber die Mac-Adresse wird leider dann so dargestellt:
Möchte gerne nur die eine MAC-Adresse, wie schon oben auf dem Bild unter Punkt 1, in die ganz linke obere Ecke des Dokumentes haben.
Bei den Punkten 2 und 3 komme ich nicht weiter... Ihr müsst wissen, ich bin in dem Gebiet ein Neuling und versuche mich da etwas hineinzufuchsen... ;)
Das ganze hier hängt nämlich mit einer Projektarbeit zusammen, die ich fertigstellen muss... Ich würde mich sehr freuen, wenn ihr mich dabei tatkräftig unterstützen könntet und für mich viele Tipps und Ratschläge parat hättet, wie ich das alles in einer Batch umsetzen könnte! Vielen Dank schon mal im vorraus!
Mit freundlichen Grüßen
cloud-strife20
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 103123
Url: https://administrator.de/contentid/103123
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
19 Kommentare
Neuester Kommentar
Hm, "sauber" bekommst du die MAC-Adressen vielleicht so...
wobei noch das Problem wäre, dass die meisten Computer ja mehr als einen MAC haben, aber da nur eine von denen in der Liste eingetragen sein dürfte, sollte das ja schon mal kein Problem darstellen.
for /f "tokens=10*" %%i in ('ipconfig/all ^| findstr "Ph"') do echo %%i>>%LOG%
Ich habe keine Batch gepostet, sondern nur einen Zeile, einen Idee. Wenn du die doppelt anklicken möchtest, dann setzt auf jeden Fall an das Ende noch ein pause.
Ich empfehle aber sehr, das ganze auf der CMD.EXE zu testen. Also: ausführen CMD.EXE. Dann hast du das schwarte Fenster in dem du deinen Batch starten kannst, und die geht auch nicht wieder zu, und du kannst dir die Meldungen ansehen.
Gruß
@echo off
for /f "tokens=10*" %%i in ('ipconfig/all ^| findstr "Ph"') do echo %%i>>%LOG%
pause
Gruß
So würde es dann aussehen, wenn man sich den Namen in einen Text-Datei schreiben lassen will:
Wenn dir nicht so klar ist, wie diese for-Schleifen funktionieren, dann gib mal auf der CMD.EXE for /? ein.
mit "delims=; tokens=1,*" sage ich for z.B., dass er zwei Token erzeugen soll, einen, der den Text vor dem ersten ; enthält und einen, der alles, was dahinter steht enthält. ; gebe ich ihm als Trennzeichen an. Es kann sein, dass du das anpassen musst, wenn du z.B. in deiner Datei das , als Trennzeichen verwendest.
Ich schreibe den Namen in eine Datei name.%~1, in dem Fall also name.MAC, das kannst du natürlich beliebig anpassen.
@echo off
::suchen wir uns mal alle MAC-Adressen, die der Rechner so hat, und rufen für jede!
:::check MAC auf
for /f "tokens=10*" %%i in ('ipconfig/all ^| findstr "Ph"') do call :checkMAC %%i
goto :eof
:checkMac
::überprüfen ob eine in der Datei macs.vergleichen drin steht,
::und wenn ja, dann schreiben wir den Namen, der hinter der MAC steht, in eine
::Text-Datei
::Dabei muss die macs.vergleichen so aufgebaut sein:
::AA-BB-CC-DD-EE-FF;Name des Rechners
echo die MAC %1 wird verglichen:
for /f "delims=; tokens=1,*" %%j in ('type macs.vergleichen') do (if "%~1"=="%%~j" echo %%k>>name.%~1)
goto :eof
mit "delims=; tokens=1,*" sage ich for z.B., dass er zwei Token erzeugen soll, einen, der den Text vor dem ersten ; enthält und einen, der alles, was dahinter steht enthält. ; gebe ich ihm als Trennzeichen an. Es kann sein, dass du das anpassen musst, wenn du z.B. in deiner Datei das , als Trennzeichen verwendest.
Ich schreibe den Namen in eine Datei name.%~1, in dem Fall also name.MAC, das kannst du natürlich beliebig anpassen.
Würde es nicht, warum denn? Wer sucht in der Batch für alle drei MACs in der Datei nach einem Namen.
Mir ist gerade noch etwas eingefallen. Wenn es wirklich nur 35 MACs sind, die verglichen werden sollen, dann dürfte folgendes zwar egal sein, wenn es dann aber mal mehr werden sollten, dann geht es so schneller:
Zeile 14. würde ich folgendermaßen anpassen:
Vorher wurde für jede Zeile der Textdatei ein Vergleich durchgeführt. Das dauert. So geht es viel Schneller, den Vergleich übernimmt nun findstr.
Mir ist gerade noch etwas eingefallen. Wenn es wirklich nur 35 MACs sind, die verglichen werden sollen, dann dürfte folgendes zwar egal sein, wenn es dann aber mal mehr werden sollten, dann geht es so schneller:
Zeile 14. würde ich folgendermaßen anpassen:
for /f "delims=; tokens=1,*" %%j in ('type macs.vergleichen^|findstr "%~1"') do (echo %%k>>name.%~1)
kA, ob du das kannst. Du darfst es auf jeden Fall. ;) Bis zum Punkt 2.2 sehe ich dein Problem als gelöst an, dafür kannst du meinen Teil hernehmen. Hier noch mal die bessere Version, in der am Ende eine Computername.txt herauskommen sollte. Da du mir nicht verraten willst, mit welchem Trennzeichen bei dir getrennt wird, in deiner CSV-Datei, kann ich dir diesbezüglich nicht helfen...
In Zeile 6 musst du dich jetzt noch mit deinem 3. Punkt beschäftigen. Da kann ich dir nicht weiterhelfen, da ich "Wsname" weder haben noch kenne, ich also keine Ahnung habe, ob man dem Programm irgendwie den Namen über die Kommandozeile mitgeben kann.
Schönen Abend noch
@echo off
::suchen wir uns mal alle MAC-Adressen, die der Rechner so hat, und rufen für jede!
:::check MAC auf
for /f "tokens=10*" %%i in ('ipconfig/all ^| findstr "Ph"') do call :checkMAC %%i
::
::PUNKT 3
goto :eof
:checkMac
::überprüfen ob eine in der Datei macs.vergleichen drin steht,
::und wenn ja, dann schreiben wir den Namen, der hinter der MAC steht, in eine
::Text-Datei
::Dabei muss die macs.vergleichen so aufgebaut sein:
::AA-BB-CC-DD-EE-FF;Name des Rechners
echo die MAC %1 wird verglichen:
for /f "delims=; tokens=1,*" %%j in ('type DATEI.csv^|findstr "%~1"') do (echo %%k>Computername.txt)
goto :eof
Schönen Abend noch
Hm, kleiner Tipp: Forumsuche hilft! z.B.: Batch - Automatisiert den Computername ändern und anschließend in die Domäne aufnehmen
Dort wird folgende Lösung propagiert:
Dabei müsste %pc% als Variable den Namen deines PCs enthalten. als gesamtes Programm sieht es denn etwas so aus:
WARNUNG: ich habe das nicht getestet, ich habe keine Ahnung von den Regestry-Schlüsseln, die da verändert werden, also empfehle ich dir wärmstens, dass du das nicht auf einem nützlichen Rechner probierst!
Wenn du es dennoch probierst, dann viel Erfolg, und berichte, ob es geklappt hat!
Gruß
Dort wird folgende Lösung propagiert:
...
REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f
REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f
REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f
REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f
...
@echo off
::suchen wir uns mal alle MAC-Adressen, die der Rechner so hat, und rufen für jede!
:::check MAC auf
for /f "tokens=10*" %%i in ('ipconfig/all ^| findstr "Ph"') do call :checkMAC %%i
::vielleicht willst du den Rechner noch neu starten...
::SHUTDOWN -r -f -t 10
goto :eof
:checkMac
::überprüfen ob eine in der Datei macs.vergleichen drin steht,
::und wenn ja, dann schreiben wir den Namen, der hinter der MAC steht, in eine
::Text-Datei
::Dabei muss die macs.vergleichen so aufgebaut sein:
::AA-BB-CC-DD-EE-FF;Name des Rechners
echo die MAC %1 wird verglichen:
for /f "delims=; tokens=1,*" %%j in ('type macs.vergleichen^|findstr "%~1"') do call :renPC %%k
goto :eof
:renPC
set pc=%~1
REG add "HKLM\SYSTEM\ControlSet001\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f
REG add "HKLM\SYSTEM\ControlSet001\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f
REG add "HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" /v ComputerName /t REG_SZ /d %pc% /f
REG add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v "NV Hostname" /t REG_SZ /d %pc% /f
goto :eof
Wenn du es dennoch probierst, dann viel Erfolg, und berichte, ob es geklappt hat!
Gruß