OS ermitteln, Ramspeichergröße in Datei schreiben lassen und wenn Speicher größer 512MB Installation starten
Hallo zusammen,
Ich bin absoluter Batchanfänger und habe die Aufgabe erhalten folgende Anforderung in eine Batchdatei umzusetzen,
1. Betriebssystemerkennung per Batch (Windows 2000, Windows XP, Windows 2000 Server und Windows 2003 Server)
2. Unter Windows 2000 und Windows XP soll wenn Ram >512MB ist Applikation A starten (sagen wir der Einfachheit halber A.exe)
Unter Windows 2000 Server und Windows 2003 Server soll wenn Ram >512MB ist Applikation B starten (sagen wir der Einfachheit halber z.b. B.exe)
Falls Ram <512MB ist soll die Batchdatei einfach beendet werden.
Bei der Betriebsystemerkennung gibt es bereits Probleme. Ich wollte dies über den Windows-Installationspfad festmachen (siehe Beispiel unten), aber leider haben Windows XP und Windows Server 2003 den gleichen
Pfad (c:\windows). Und Windows 2000 und Windows 2000 Server benutzen auch den gleichen Pfad (c:\winnt). Damit könnte man oben genannten Punkt 2 nicht umsetzen Eventuell irgendwie über den Befehl ver?
Aber auch hier dürfte es Probleme geben, da z.B Windows 2000 und Windows 2000 Server 5.0.2195 als Versionsnummer haben und somit auch keine Unterscheidung möglich ist
if exist c:\windows goto.....
if exist c:\winnt goto...
Beim Auslesen des Speichers hätte ich nachfolgendes genutzt, aber unter Windows 2000 gibt es anscheinend leider kein Systeminfo von Haus aus. Danach müsste wie unter Punkt 2 beschrieben der Speicher aus der
Datei ausgelesen werden und wenn >512MB ist entweder Applikation A bzw. Applikation B starten.
systeminfo | findstr /C:"Gesamter physikalischer Speicher" >c:\speicher.txt
Ich hoffe ihr könnt mir da mit einer einfachen Lösung helfen, bin nicht wirklich der Batchexperte, habe schon ein wenig probiert, aber leider komme ich nicht wirklich weiter
Viele Grüße
Ich bin absoluter Batchanfänger und habe die Aufgabe erhalten folgende Anforderung in eine Batchdatei umzusetzen,
1. Betriebssystemerkennung per Batch (Windows 2000, Windows XP, Windows 2000 Server und Windows 2003 Server)
2. Unter Windows 2000 und Windows XP soll wenn Ram >512MB ist Applikation A starten (sagen wir der Einfachheit halber A.exe)
Unter Windows 2000 Server und Windows 2003 Server soll wenn Ram >512MB ist Applikation B starten (sagen wir der Einfachheit halber z.b. B.exe)
Falls Ram <512MB ist soll die Batchdatei einfach beendet werden.
Bei der Betriebsystemerkennung gibt es bereits Probleme. Ich wollte dies über den Windows-Installationspfad festmachen (siehe Beispiel unten), aber leider haben Windows XP und Windows Server 2003 den gleichen
Pfad (c:\windows). Und Windows 2000 und Windows 2000 Server benutzen auch den gleichen Pfad (c:\winnt). Damit könnte man oben genannten Punkt 2 nicht umsetzen Eventuell irgendwie über den Befehl ver?
Aber auch hier dürfte es Probleme geben, da z.B Windows 2000 und Windows 2000 Server 5.0.2195 als Versionsnummer haben und somit auch keine Unterscheidung möglich ist
if exist c:\windows goto.....
if exist c:\winnt goto...
Beim Auslesen des Speichers hätte ich nachfolgendes genutzt, aber unter Windows 2000 gibt es anscheinend leider kein Systeminfo von Haus aus. Danach müsste wie unter Punkt 2 beschrieben der Speicher aus der
Datei ausgelesen werden und wenn >512MB ist entweder Applikation A bzw. Applikation B starten.
systeminfo | findstr /C:"Gesamter physikalischer Speicher" >c:\speicher.txt
Ich hoffe ihr könnt mir da mit einer einfachen Lösung helfen, bin nicht wirklich der Batchexperte, habe schon ein wenig probiert, aber leider komme ich nicht wirklich weiter
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 137475
Url: https://administrator.de/forum/os-ermitteln-ramspeichergroesse-in-datei-schreiben-lassen-und-wenn-speicher-groesser-512mb-installation-137475.html
Ausgedruckt am: 17.04.2025 um 22:04 Uhr
29 Kommentare
Neuester Kommentar
soda, hier eine Lösung (soviel Geduld hat das jetzt eh nicht erfordert...
:
(es geht SICHER eleganter, (evtl. hat Bastla wieder eine Idee...), aber diese hier funktioniert zumindest...)
Konnte das Funktionieren des Codes auf XP und 2003Server erfolgreich teste, 2000 hab ich hier nicht (mehr)...
lg
würde mich freuen zu lesen, ob das Script Deinen Erfordernissen entspricht...
[edit um 11:27: ] in der Zeile vor WshShell.Run "B.exe" war ein kleiner Fehler drinnen... jetzt passts!
(es geht SICHER eleganter, (evtl. hat Bastla wieder eine Idee...), aber diese hier funktioniert zumindest...)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colRAMSystems = objWMIService.ExecQuery _
("Select * from Win32_PhysicalMemory")
zaehler = 0
For Each objItem in colRAMSystems
if zaehler = 0 then
s= objItem.Capacity/1048576
end if
zaehler = zaehler +1
Next
if s > 512 then
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
'Wscript.Echo objOperatingSystem.Caption
if instr(objOperatingSystem.Caption,"XP")>1 OR instr(objOperatingSystem.Caption,"2000")>1 then
WshShell.Run "A.exe"
end if
if instr(objOperatingSystem.Caption,"Server")>1 then
WshShell.Run "B.exe"
end if
Next
end if
Konnte das Funktionieren des Codes auf XP und 2003Server erfolgreich teste, 2000 hab ich hier nicht (mehr)...
lg
würde mich freuen zu lesen, ob das Script Deinen Erfordernissen entspricht...
[edit um 11:27: ] in der Zeile vor WshShell.Run "B.exe" war ein kleiner Fehler drinnen... jetzt passts!
Hallo DieMatrix und willkommen im Forum, hallo urobe73!
Mit eigentlich nur kosmetischen Änderungen am Script (urobe73 hatte mich ja "eingeladen"
) führt ein Test mit XP Pro bei mir zum gewünschten Ergebnis (Start des Windows-Rechners). Getestet habe ich mit:
Anzumerken wäre, dass bei einem Server-BS das zweite Programm zusätzlich gestartet würde - falls das nicht gewünscht sein sollte, die Zeilen 18 und 19 zu
zusammenfassen (ich teste das zur Sicherheit später auch noch mit einem W2000-Server).
Grüße
bastla
Mit eigentlich nur kosmetischen Änderungen am Script (urobe73 hatte mich ja "eingeladen"
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colRAMSystems = objWMIService.ExecQuery _
("Select * from Win32_PhysicalMemory")
For Each objItem in colRAMSystems
s = objItem.Capacity / 1048576
Exit For
Next
If s >= 512 Then
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
If InStr(objOperatingSystem.Caption, "XP") > 0 Or InStr(objOperatingSystem.Caption, "2000") > 0 Then
WshShell.Run "c:\windows\system32\calc.exe"
End If
If InStr(objOperatingSystem.Caption,"Server") > 0 Then
WshShell.Run "c:\windows\system32\charmap.exe"
End If
Next
End If
ElseIf InStr(objOperatingSystem.Caption,"Server") > 0 Then
Grüße
bastla
mann, das gibts doch nicht.
Ich sitz hier jetzt an einer kiste mit 512 RAM, XP SP1 und es läuft...
also nochmal von vorne:
kopiere folgenden Code und speicher ihn als "skript.vbs"
doppelklick auf die skript.vbs und fertig isses!
Anmerkung1:
Ich habe dir die Zeilen
Wscript.Echo "Du hast " & s & " RAM eingebaut"
Wscript.Echo objOperatingSystem.Caption
dazugegeben, Du solltest vor dem Start der calc.exe noch 2 Popups bekommen...
wenn alles läuft, kannst Du diese beiden Zeilen entfernen...
Anmerkung2:
bei den von dir genannten windowseigenen calc.exe und charmap.exe kannst Du den vollen Pfad weglassen, da der ohnehin in der Umgebungsvariablen gespeichert ist. (es schadet aber auch nicht, wenn du ihn drinnen lässt!)
Anmerkung3:
Du kannst die Datei auch aus der Dos-Box starten, dann schauts so aus:
gutes gelingen
lass mich wissen, obs geklappt hat!
lg
Edi
Ich sitz hier jetzt an einer kiste mit 512 RAM, XP SP1 und es läuft...
also nochmal von vorne:
kopiere folgenden Code und speicher ihn als "skript.vbs"
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
Set colRAMSystems = objWMIService.ExecQuery _
("Select * from Win32_PhysicalMemory")
zaehler = 0
For Each objItem in colRAMSystems
if zaehler = 0 then
s= objItem.Capacity/1048576
end if
zaehler = zaehler +1
Next
Wscript.Echo "Du hast " & s & " RAM eingebaut"
if s > 512 then
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
Wscript.Echo objOperatingSystem.Caption
if instr(objOperatingSystem.Caption,"XP")>1 OR instr(objOperatingSystem.Caption,"2000")>1 then
WshShell.Run "calc.exe"
end if
if instr(objOperatingSystem.Caption,"Server")>1 then
WshShell.Run "charmap.exe"
end if
Next
end if
doppelklick auf die skript.vbs und fertig isses!
Anmerkung1:
Ich habe dir die Zeilen
Wscript.Echo "Du hast " & s & " RAM eingebaut"
Wscript.Echo objOperatingSystem.Caption
dazugegeben, Du solltest vor dem Start der calc.exe noch 2 Popups bekommen...
wenn alles läuft, kannst Du diese beiden Zeilen entfernen...
Anmerkung2:
bei den von dir genannten windowseigenen calc.exe und charmap.exe kannst Du den vollen Pfad weglassen, da der ohnehin in der Umgebungsvariablen gespeichert ist. (es schadet aber auch nicht, wenn du ihn drinnen lässt!)
Anmerkung3:
Du kannst die Datei auch aus der Dos-Box starten, dann schauts so aus:
C:\>cscript c:\skript.vbs
Microsoft (R) Windows Script Host, Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.
Du hast 512RAM eingebaut
Microsoft Windows XP Professional
C:\>
gutes gelingen
lass mich wissen, obs geklappt hat!
lg
Edi
Hallo DieMatrix!
Ändere die Zeilen 9 bis 15 im Script von urobe73 auf:
[Edit] Wenn Du noch die Zeilen 24 bis 29 auf
änderst, sollte auch tatsächlich nur das richtige Programm gestartet werden - tut es jedenfalls auf einem W2000-Server ...
[/Edit]
[Edit2] Noch ein letzter Hinweis: Wenn auch bei 512 MB schon installiert werden soll, dann:
[/Edit2]
Grüße
bastla
Ändere die Zeilen 9 bis 15 im Script von urobe73 auf:
For Each objItem in colRAMSystems
s = s + objItem.Capacity / 1048576
Next
if instr(objOperatingSystem.Caption,"Server") > 0 then
WshShell.Run "charmap.exe"
elseif instr(objOperatingSystem.Caption,"XP")>1 OR instr(objOperatingSystem.Caption,"2000")>1 then
WshShell.Run "calc.exe"
end if
[/Edit]
[Edit2] Noch ein letzter Hinweis: Wenn auch bei 512 MB schon installiert werden soll, dann:
If s >= 512 Then
Grüße
bastla
@bastla:
well done
mein Post von 17:24:08 Uhr ist hiermit überflüssig (bin mitten im Schreiben des Beitrags zum Nachmittagskaffee "beordert" worden...
ich fasse für DieMatrix also nun zusammen:
zum besseren Verständnis:
alles was ab hier folgt, wird nur abgearbeitet, wenn RAM über 512MB liegt...
es wird überprüft, ob im Betriebssystem das Wort server vorkommt. Falls dem so ist, dann wird die Datei calc.exe gestartet
Falls die 1. Prüfung (server) negativ verläuft werden nun in der Bezeichnung des Betriebssystems die Zeichen "XP" oder "2000" gesucht. Wenn diese Prüfung postitiv verläuft, wird die Datei charmap.exe gestartet...
nun sollte wohl alles so laufen, wie erwünscht...
lg
well done
mein Post von 17:24:08 Uhr ist hiermit überflüssig (bin mitten im Schreiben des Beitrags zum Nachmittagskaffee "beordert" worden...
ich fasse für DieMatrix also nun zusammen:
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colRAMSystems = objWMIService.ExecQuery _
("Select * from Win32_PhysicalMemory")
For Each objItem in colRAMSystems
s = s + objItem.Capacity / 1048576
Next
If s >=512 Then
Set WshShell = WScript.CreateObject("WScript.Shell")
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
If InStr(objOperatingSystem.Caption,"Server") > 0 Then
WshShell.Run "c:\windows\system32\calc.exe"
ElseIf InStr(objOperatingSystem.Caption, "XP") > 0 Or InStr(objOperatingSystem.Caption, "2000") > 0 Then
WshShell.Run "c:\windows\system32\charmap.exe"
End If
Next
End If
zum besseren Verständnis:
If s > 512 Then
If InStr(objOperatingSystem.Caption,"Server") > 0 Then
ElseIf InStr(objOperatingSystem.Caption, "XP") > 0 Or InStr(objOperatingSystem.Caption, "2000") > 0 Then
nun sollte wohl alles so laufen, wie erwünscht...
lg
Hallo DieMatrix!

Grüße
bastla
P.S.: Den Hinweis auf "> 512" vs ">= 512" wiederhole ich nun zur Sicherheit noch mal ...
Nur im nochmal sicherzugehen, sorry falls ich mich wiederhole:
No problem Bei diesem Skript wird nun folgendes geprüft?
Bei Ram >512MB und OS Windows XP oder Windows 2000 ->Start der Application A (also Calc.exe)
Bei Ram >512MB und OS Windows 2000 Server oder Windows 2003 Server -> Start der Application B (also charmap.exe)
So sollte es sein ...Bei Ram >512MB und OS Windows XP oder Windows 2000 ->Start der Application A (also Calc.exe)
Bei Ram >512MB und OS Windows 2000 Server oder Windows 2003 Server -> Start der Application B (also charmap.exe)
Grüße
bastla
P.S.: Den Hinweis auf "> 512" vs ">= 512" wiederhole ich nun zur Sicherheit noch mal ...
Oh Mann!
Ich bin einfach zu langsam
meinen Beitrag von 18:59:11 könntes schon wieder vergessen...
drum lass ich es jetzt auch für heute gut sein...
Dieses Internetz ist für alte Männer einfach zu schnell....
@DieMatrix: freut mich, dass es nun läuft!!!
@ bastla: die Idee mit dem umdrehen der If-Elseif-Prüfung hatte ich auch... funny
so, ich geh jetzt schaun, obs heute im Fernsehen einen Kuhlenkampff mit Einer-wird-gewinnen oder sonst etwas altersadäquates spielt...
weil: hier im Internet geht mir einfach alles viel zu schnell...
lg
Ich bin einfach zu langsam
meinen Beitrag von 18:59:11 könntes schon wieder vergessen...
drum lass ich es jetzt auch für heute gut sein...
Dieses Internetz ist für alte Männer einfach zu schnell....
@DieMatrix: freut mich, dass es nun läuft!!!
@ bastla: die Idee mit dem umdrehen der If-Elseif-Prüfung hatte ich auch... funny
so, ich geh jetzt schaun, obs heute im Fernsehen einen Kuhlenkampff mit Einer-wird-gewinnen oder sonst etwas altersadäquates spielt...
weil: hier im Internet geht mir einfach alles viel zu schnell...
lg
@urobe73
Nur der Ordnung halber: Da jetzt zuerst auf "Server" geprüft wird, müsste in Zeile 17 "charmap.exe" und in Zeile 19 "calc.exe" gestartet werden - und zwar, wie Du oben schon angeführt hast, ohne Pfadangabe - unter W2000 liegt "System32" ja unterhalb des Verzeichnisses "WinNT" ...
Grüße
bastla
[Edit]
Kulenkampff? Demnach steht 73 nicht für Dein Geburtsjahr ...
... ich hab' ihn aber auch noch live erlebt (in der Erst-Fassung von EWG natürlich)...
[/Edit]
Nur der Ordnung halber: Da jetzt zuerst auf "Server" geprüft wird, müsste in Zeile 17 "charmap.exe" und in Zeile 19 "calc.exe" gestartet werden - und zwar, wie Du oben schon angeführt hast, ohne Pfadangabe - unter W2000 liegt "System32" ja unterhalb des Verzeichnisses "WinNT" ...
Grüße
bastla
[Edit]
Kulenkampff? Demnach steht 73 nicht für Dein Geburtsjahr ...
... ich hab' ihn aber auch noch live erlebt (in der Erst-Fassung von EWG natürlich)...
[/Edit]
btw:
@ bastla:
Da Du ja doch um einiges fitter bist als ich (nicht nur was die Geschwindigkeit Deiner Beiträge, sondern auch den Umgang mit VBS betrifft) könntest Du dir ja - falls Du Kapazitäten hast - meinen Beitrag anschaun...
Dieses Script hat SICHER jede Menge verbesserungspotential. Würde mich freuen!
lg
@ bastla:
Da Du ja doch um einiges fitter bist als ich (nicht nur was die Geschwindigkeit Deiner Beiträge, sondern auch den Umgang mit VBS betrifft) könntest Du dir ja - falls Du Kapazitäten hast - meinen Beitrag anschaun...
Dieses Script hat SICHER jede Menge verbesserungspotential. Würde mich freuen!
lg
nö nö, das 73 steht doch für mein Geburtsjahr...
freut mich, dass Du also auch schon einige Lenze erlebt hast...
Ich erinner mich ja immer wieder gerne, als ich bei Oma EWG schauen durfte... (daheim war um 19.00 Bettruhe angesagt...MMpppffff)
Kuli wird hin und wieder im 3. Deutschen Programm wiederholt. SAGENHAFT wie langsam da alles vor sich geht. genau richtig für mich
lg
freut mich, dass Du also auch schon einige Lenze erlebt hast...
Ich erinner mich ja immer wieder gerne, als ich bei Oma EWG schauen durfte... (daheim war um 19.00 Bettruhe angesagt...MMpppffff)
Kuli wird hin und wieder im 3. Deutschen Programm wiederholt. SAGENHAFT wie langsam da alles vor sich geht. genau richtig für mich
lg
@bastla
freut mich! vielleicht könnte man das Ding ja so hinbekommen, dass es wirklich jeder Nuppler ohne Veränderung verwenden könnte...
Dir auch ein schönes Wochenende
lg
Edi
freut mich! vielleicht könnte man das Ding ja so hinbekommen, dass es wirklich jeder Nuppler ohne Veränderung verwenden könnte...
Dir auch ein schönes Wochenende
lg
Edi
uiui...
Nicht, dass Ungeduld zu meinen Stärken zählt - eher ist es umgekehrt...
aber in Deinem Fall gelange ich doch ein bissl an meine Grenzen
Versuch mal folgendes:
ersetze den Teil
durch
lg
Nicht, dass Ungeduld zu meinen Stärken zählt - eher ist es umgekehrt...
aber in Deinem Fall gelange ich doch ein bissl an meine Grenzen
Versuch mal folgendes:
ersetze den Teil
For Each objItem in colRAMSystems
s = s + objItem.Capacity / 1048576
Next
For Each objItem in colRAMSystems
s=s & "Bank: " & objItem.BankLabel & vbCrLf
s=s & "Capacity: " & objItem.Capacity/1048576 & " MB" & vbCrLf
Next
Wscript.Echo "Du hast " & s & " RAM verbaut"
lg