Systeminformations-BAT-Skript

Laquestianne

Cadet 2nd Year
Registriert
Sep. 2009
Beiträge
25
Hallo,

ich wollte ein Linux-Systeminformationsskript für Windows umschreiben und war sehr erleichtert, als ich den Befehl "systeminfo" entdeckt habe -allerdings muss ich noch wissen, wie das Äquivalent zu folgendem Linuxbefehl ist:

Code:
/bin/uname -s | awk '{print "|System="$1}'>> sysinfo.txt

Momentan habe ich nur

Code:
systeminfo | findstr /c:"Betriebssystemname">>H:\sysinfo.txt

Da fehlt also noch die awk-Funktion, die bewirkt, dass nicht die ganze Zeile ausgegeben wird, sondern nur ein bestimmtes Wort aus dieser Zeile und davor noch ein eigener String. Weiß jemand, wie man das hinkriegt?
 
Zuletzt bearbeitet:
Muss es eine Batch-Datei sein? Denke mit der PowerShell ließe sich das leichter machen oder evtl mit dem WSH...
 
Die PowerShell haben wir leider nicht, WSH wäre eine Möglichkeit; wie sähe das da aus, dass die von findstr gefundene Zeile nicht ganz ausgegeben wird, sondern nur ein Wort an einer bestimmten Position? Also mir ist eigentlich egal, obs bat, vbs oder sonstwas ist, Hauptsache es läuft (und ist möglichst einfach zu schreiben) ;)
 
Code:
@echo off & setlocal 
rem D:\tmp.txt ggf durch anderen pfad ersetzen und anpassen unten
systeminfo > D:\tmp.txt
for /f "delims=" %%i in ('findstr /c:"Betriebssystemname" D:\tmp.txt') do set "Zeile=%%i"
echo %Zeile:~47% >> D:\sysinfo.txt
del D:\tmp.txt

Die Pfade usw halt anpassen... gibt vielleicht ne einfachere Lösung, bin auch kein Batch-Profi ^^
 
Vielen Dank :)

Mh, ich musste da Zeile 40 eintragen, da du aber die Zeile 47 hast, vermute ich mal, dass das bei verschiedenen Windows-Versionen unterschiedlich ist und das Skript sollte auf 2003, 2003 Enterprise und XP Pro laufen. Wobei, da könnte ich auch 3 angepasste Skripte schreiben. Schöner wärs natürlich, wenn ich z.B. das 3. Wort (in Linux durch $3) extrahieren könnte.

Hab gesehen, dass die PowerShell ja kostenlos ist, die könnte ich doch installieren, wenn nötig. Welche Endung hätte das Skript dann damit eigentlich?

Wie kann man "|" in eine Datei schreiben? <echo |System=> funktioniert nicht und bei echo "|System=" werden die Kommas mit ausgegeben.
Und wie geht echo ohne newline in einer bat?
Ergänzung ()

Hier mal das aktuelle Skript:

Code:
@echo off & setlocal ENABLEDELAYEDEXPANSION

TITLE Systeminformationen
echo ##############################################################
echo #                                                            #
echo # Sammelt Systeminformationen (Servername, System,           #
echo # Distribution, Version, Ram, Haupt-IP, IPs,                 #
echo # Festplattengroesse, CPU-Geschwindigkeit, Anzahl der CPUs)  #
echo #                                                            #
echo # Schreibt diese in eine Datei mit dem Namen des Servers     #
echo # (in denselben Ordner, wo sich dieses Skript befindet)      #
echo #                                                            #
echo ##############################################################
echo.

rem D:\tmp.txt ggf durch anderen pfad ersetzen und anpassen unten
systeminfo > sysinfo.tmp

REM Zeige Rechnername
for /f "delims=" %%i in ('findstr /c:"Hostname" sysinfo.tmp') do set "hostname=%%i"
set name=%hostname:~40%
echo ^|Servername=%hostname:~40% > %name%.txt

REM Zeige Betriebssystem
echo ^|System=Windows >> %name%.txt

REM Wenn Enterprise gefunden wird, Distribution=Enterprise, sonst Distribution=Standard
for /f "delims=" %%i in ('findstr /c:"Enterprise" sysinfo.tmp') do set "distriname=Enterprise"
if distriname==Enterprise (
echo ^|Distribution=Enterprise >> %name%.txt
)
if not distriname==Enterprise (
echo ^|Distribution=Standard >> %name%.txt
)

REM Zeige Version der Distribution
for /f "delims=" %%i in ('findstr /c:"Windows NT" sysinfo.tmp') do set "version=NT"
for /f "delims=" %%i in ('findstr /c:"Windows 2008" sysinfo.tmp') do set "version=2008"
for /f "delims=" %%i in ('findstr /c:"Windows 2003" sysinfo.tmp') do set "version=2003"
for /f "delims=" %%i in ('findstr /c:"Windows 2000" sysinfo.tmp') do set "version=2000"
for /f "delims=" %%i in ('findstr /c:"Windows XP" sysinfo.tmp') do set "version=XP"
echo ^|Version=%version% >> %name%.txt


REM Version, Patchlevel etc
for /f "delims=" %%i in ('findstr /c:"Betriebssystemversion" sysinfo.tmp') do set "patchlevel=%%i"
echo ^|Patchlevel=%patchlevel:~40% >> %name%.txt

REM Zeige Ram
for /f "delims=" %%i in ('findstr /c:"Gesamter physikalischer Speicher" sysinfo.tmp') do set "ram=%%i"
echo ^|Ram=%ram:~40% >> %name%.txt

REM Zeige IPs(?)
ipconfig /all > H:/ip.tmp
for /f "delims=" %%i in ('findstr /c:"IP-Adresse" ip.tmp') do set "ips=%%i"
echo ^|IPs=%ips:~44% >> %name%.txt

REM Zeige Festplatten (Adminrechte nötig) ...ToDo...

REM Zeige CPU(s)
for /f "delims=" %%i in ('findstr /c:"Prozessor(en):" sysinfo.tmp') do set "cpus=%%i"
echo ^|CPU(s)=%cpus:~40% >> %name%.txt

REM Zeige CPU-Typ
for /f "delims=" %%i in ('findstr /c:"MHz" sysinfo.tmp') do set "mhz=%%i"
echo ^|CPU Typ=%mhz:~40% >> %name%.txt

REM Zeige CPU Count
set /a cpucount=0
for /f "delims=" %%i in ('findstr /c:"MHz" sysinfo.tmp') do (
set /a cpucount+=1
)
echo ^|Kerne=%cpucount% >> %name%.txt


REM Aufräumen
del *.tmp

exit

Ich habs bisher nur auf einem XP-Rechner ausprobiert, da funktionierts ganz gut.
Ist aber noch nicht ganz ausgereift.


Weiß jemand, wie ich unter "CPU-Typ" nur den MHz-Wert rauskriege? Also dass ich vor und nach der MHz-Angabe jeweils die Zeile abschneide und dann z.B. die Ausgabe habe "2500 MHz" ?


| kann man durch ^| schreiben hab ich gefunden^^
 
Zuletzt bearbeitet:
"CPU-Typ" nur den MHz-Wert

REM Zeige CPU-Typ
REM List die 10te Spate aus, wobei Spalten durch Leerzeichen definiert sind,
Rem sofern andere Zeichen dazwischen stehen
for /f "tokens=10 delims= " %%i in ('findstr /c:"MHz" sysinfo.tmp') do set "mhz=%%i"

echo ^|CPU Typ=%mhz% MHz >> %name%.txt


Wenn die Tilde stört:

echo ^|CPU Typ=%mhz:~-4% MHz >> %name%.txt


Geht aber auch einfacher, indem du die for-Zeile so lässt wie du sie geschrieben hast und nur das echo änderst:

echo ^|CPU Typ=%mhz:~-8% >> %name%.txt


Das ~-8 bedeutet dass die Zeile ab dem achten Zeichen von hinten angezeigt wird. Man kann die Anzahl der Zeichen, die angezeigt werden beschränken. Hier beispielsweise nur auf den Wert, ohne Maßeinheit - also 4 Zeichen:

echo ^|CPU Typ=%mhz:~-8,4% >> %name%.txt

Bei einer fünfstellingen Anzeige, wenn also die Tilde mit dargestellt werden soll, hieße es dem entsprechend:

echo ^|CPU Typ=%mhz:~-9,5% >> %name%.txt
 
Zuletzt bearbeitet:
Zurück
Oben