meister-petz
Goto Top

Per batch Arbeitsspeicher in der Systeminfo auslesen

Ich könnte schwören das ich eine ähnliche Frage schonmal im Forum gesehen habe aber finde sie einfach nicht.

Moin Moin,

könnt ihr mir bei der erstellung einer batch helfen?
Es geht um folgendes ich möchte in der Systeminfo den Arbeitspeicher auslesen und in eine Variable schreiben.
Habe das schon mit findstr gemacht. Aber hier kommt gleich meine erste Frage.
Kann ich auch das auch mit einem anderen Befehl realisieren?
Die Größe des Arbeitsspeichers steht ja immer an der selben Stelle der Systeminfo.
Gibt es da einen Befehl mit dem ich die Zeile und das Wort angeben kann?
Müsste ja mit for /f und token möglich sein, aber ich kenn mich zu wenig aus.

Dann zu meinem zweitem Problem die Systeminfo macht einen tausender punkt (also 1.024).
Wie bekomme ich den weg, sodass nur noch die 1024 in der Variable steht?
Hab schon gelesen, dass das irgendwie mit delims gehen sollte aber bekomm es nicht hin und kenn mich zu wenig mit batch aus.

Für alle Vorschläge bin ich dankbar
Grüße MeisterPetz
Kommentar vom Moderator Biber am 10.03.2011 um 08:52:18 Uhr
Beitragsart geändert von "Anleitung" auf "Frage".

Content-ID: 162355

Url: https://administrator.de/contentid/162355

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

BigWim
BigWim 10.03.2011 um 08:22:16 Uhr
Goto Top
Moin MeisterPetz,

dann veröffentliche doch mal den aktuellen Stand Deines Scripts, damit man sehen kann, wo und wie man helfen kann.


Markus
Meister-Petz
Meister-Petz 10.03.2011 um 08:38:21 Uhr
Goto Top
call systeminfo | findstr /C:"Gesamter physikalischer Speicher" > mem.txt
das ist der punkt meiner ersten Frage find ich einfach nicht schön und da ich nicht immer davon audgehen kann dass ich die info in deutsch bekomme meine Frage
das ich die variable in eine neue txt schreibe ist zwar nicht schön aber besser weiß ich es nicht
for /f "tokens=4" %%i in (mem.txt) do set bla=%%i
if %bla% geq "500" goto :as
Die Variable wird dann nach größe überprüft, ursprung 2. Problem da ich schlecht ne 1.024 mit >=1000 vergleichen kann
if %bla% geq "1000" goto :ok

:ok
regedit /s ramdisk.reg
Ziel ist es die ramdisk größe der Arbeitspeichergröße anzupassen

:as
pause
BigWim
BigWim 10.03.2011, aktualisiert am 18.10.2012 um 18:46:07 Uhr
Goto Top
Moin MeisterPetz,

als erster wäre es nett, wenn Du die nutzen würdest. Das steigert die Lesbarkeit sowie die Hilfsbereitschaft.

Zu dem Zahlenproblem habe ich eine zusätzliche Forschleife eingefügt, die bis zu "4 Punkte" filtert. Ich denke, dass sollte erst einmal reichen. Eine Superanleitung zum Thema "For-Schleifen" findest Du übrigens hier.
[edit]
if %WertOhnePunkt% geq "500" goto :as   

Ich bin mir nicht sicher, ob die Anführungszeichen richtig sind. Ich denke eher so:
if %WertOhnePunkt% geq 500 goto :as 
[/edit]


call systeminfo | findstr /C:"Gesamter physikalischer Speicher" > mem.txt   

for /f "tokens=4" %%i in (mem.txt) do set bla=%%i  
for /f "tokens=1-4 delims=." %%a in ("%bla%") do Set WertOhnePunkt=%%a%%b%%c%%d  
if %WertOhnePunkt% geq "500" goto :as   

if %WertOhnePunkt% geq "1000" goto :ok  

:ok
regedit /s ramdisk.reg 
Ziel ist es die ramdisk größe der Arbeitspeichergröße anzupassen

:as
pause

Was die Sprache betrifft wäre mein Vorschlag, die vollständige Ausgabe in eine Datei umzuleiten. Dann hast Du die Möglichkeit, mehrere Suchen durchzuführen.
So könntest Du zuerst nach dem "Systemgebietsschema" oder "Eingabegebietsschema" suchen und mit einer IF-Abfrage entsprechend reagieren. Ungetestet etwa so

call systeminfo >Systeminfo.txt
type systeminfo.txt | findstr /C:"Systemgebietsschema" > Systeminfo_Sprache.txt   
for /f "tokens=4" %%i in (Systeminfo_Sprache.txt) do set Sprache=%%i  

If /i "%Sprache% == "de" Set Speicherfrage="Gesamter physikalischer Speicher"  
If /i "%Sprache% == "en" Set Speicherfrage="guckst Du Duden"  

type systeminfo.txt | findstr /C:"%Speicherfrage%" >mem.txt   
.
.
.


Markus
AndreasHoster
AndreasHoster 10.03.2011 um 09:40:16 Uhr
Goto Top
Es nicht aus Systeminfo lesen, sondern aus WMI.
wmic path win32_operatingsystem get TotalVisibleMemorySize /value
Ergibt bei mir als Ausgabe:
TotalVisibleMemorySize=3628208

Name sollte immer Englisch sein, egal was für eine Sprache das OS hat und keine Tausender-Trennzeichen.
bastla
bastla 10.03.2011 um 10:22:08 Uhr
Goto Top
@BigWim
Nur als Annmerkung: Das Zwischenspeichern in einer Datei sollte nicht nötig sein - zB
for /f "tokens=4" %%i in ('systeminfo^|findstr /C:"Gesamter physikalischer Speicher"') do set "bla=%%i"
und
for /f "tokens=1-4 delims=." %%a in ("%bla%") do Set WertOhnePunkt=%%a%%b%%c%%d
ließe sich vielleicht etwas eleganter durch
set "Set WertOhnePunkt=%bla:.=%"
erledigen ...

Grüße
bastla
bastla
bastla 10.03.2011 um 10:23:04 Uhr
Goto Top
@AndreasHoster
Einziger Einwand: Die Verwendung von "wmic" erfordert Admin-Rechte ...

Grüße
bastla
AndreasHoster
AndreasHoster 10.03.2011 um 10:53:06 Uhr
Goto Top
@bastla:
Danke für den Hinweis.

Ich selber verwende wmic im Normalfall nicht, ich würde es gleich im WSH skripten und dann sind für eine WMI Abfrage keine Adminrecht nötig.
   Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")  
   Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL")                                            
   For Each objItem In colItems
      WScript.Echo objItem.TotalVisibleMemorySize
   Next
BigWim
BigWim 10.03.2011 um 11:11:54 Uhr
Goto Top
@bastla
Nur als Annmerkung ....
Wie sehr ich diese Worte doch mag. Denn jetzt wirds spannend ....

for /f "tokens=4" %%i in ('systeminfo^|findstr /C:"Gesamter physikalischer Speicher"') do set "bla=%%i"  
> 
Das habe ich anfangs probiert. Nur bei mir fand die Anweisung kein Ende. Deshalb bin ich davon ausgegangen, dass die aus Performencegründen nicht so gelungen ist, vor allem wenn ich zwei oder mehrere Abfragen mache.

Und Danke für diesen Tipp:
set "Set WertOhnePunkt=%bla:.=%"  
> 
"Set" und ich werden wohl keine Freunde mehr. Ich hatte das dunkel in Erinnerung, aber nicht mehr gefunden ...

Markus
bastla
bastla 10.03.2011 um 12:12:28 Uhr
Goto Top
@AndreasHoster
ich würde es gleich im WSH skripten
Auch in dieser Hinsicht bin ich durchaus bei Dir ... face-smile

Grüße
bastla
bastla
bastla 10.03.2011 um 12:15:57 Uhr
Goto Top
Hallo BigWim!
Deshalb bin ich davon ausgegangen, dass die aus Performencegründen nicht so gelungen ist, vor allem wenn ich zwei oder mehrere Abfragen mache.
Ist eine zielführende Überlegung - allerdings solltest Du dann aber nicht schon vorweg filtern, sondern etwa so vorgehen:
set "Info=%temp%\SysInfo.txt"  
sysinfo>"%Info%"  
for /f "tokens=4" %%i in ('findstr /C:"Gesamter physikalischer Speicher" "%Info%"') do set "bla=%%i"  
Noch ein Nachtrag: "call" wird nur zum Aufruf eines Batch-Unterprogrammes benötigt, nicht für den Start von Programmen (dafür gibt es allenfalls "start") ...

Grüße
bastla
BigWim
BigWim 10.03.2011 um 13:05:07 Uhr
Goto Top
Hallo Bastla,

Ist eine zielführende Überlegung
Tja, ich bin halt nur ein kleiner Dummer face-wink

for /f "tokens=4" %%i in ('findstr /C:"Gesamter physikalischer Speicher" "%Info%"') do set
Das wende ich noch viel zu wenig an. Macht der Gewohntheit, da ich find (und findstr) immer nur mit dem | in Verbindung bringe face-sad

Noch ein Nachtrag: "call" wird nur zum Aufruf eines Batch-Unterprogrammes benötigt, nicht für den Start
von Programmen (dafür gibt es allenfalls "start") ...
Nochmals Danke. Eigentlich klar, aber in diesem Fall ohne Überlegung aus dem Verfasserscript genommen. Gelobe Besserung ....

Viele Grüße
Markus
Meister-Petz
Meister-Petz 10.03.2011 um 13:25:51 Uhr
Goto Top
Wow das ist mal ein anderer Ansatz

wmic path win32_operatingsystem get TotalVisibleMemorySize /value
der Befehl funtioniert zumindest direkt in der cmd
wenn ich ihn aber als batch ausführen lasse bekomme ich einen: invalid get expression
geht da die Batch zu schnell zu oder was mache ich falsch?
Würde es gerne auch mal auf diesem Weg probieren da ich wirklich nur das bekomme was ich benötige.

Gruß
MeisterPetz
Meister-Petz
Meister-Petz 10.03.2011 um 13:30:16 Uhr
Goto Top
Danke für eure tolle Hilfe
das . Problem ist auf alle Fälle gelöst
Habe nur gerade keine Zeit das mit dem 2. Prob zu testen
Werde euch aber auf alle Fälle bescheid geben

Grüße
MeisterPetz

PS:
das call kam von mir und ich habe es einfach nicht besser gewußt face-wink
bastla
bastla 10.03.2011 um 14:35:09 Uhr
Goto Top
Hallo Meister-Petz!

Vielleicht so:
for /f "tokens=2 delims==" %%i in ('wmic path win32_operatingsystem get TotalVisibleMemorySize /value^|findstr "TotalVisibleMemorySize"') do set "Speicher=%%i"
Grüße
bastla
bastla
bastla 10.03.2011 um 14:36:14 Uhr
Goto Top
@BigWim
Tja, ich bin halt nur ein kleiner Dummer face-wink
Wieso das denn?

Grüße
bastla
BigWim
BigWim 10.03.2011 um 15:57:13 Uhr
Goto Top
@bastla,

Wieso das denn?
Mich ärgert das, wenn ich Dinge vor Augen habe und doch nicht sehe ...

Markus
Meister-Petz
Meister-Petz 13.03.2011 um 19:49:33 Uhr
Goto Top
Danke Batstla

funtioniert einwandfrei
(sorry für die späte antwort, konnte es aber erst heute testen)

Grüße
MeiterPetz