swidch
Goto Top

Größe des Arbeitsspeicher auslesen

Ich versuche die Größe des Arbeitsspchers auszulesen und diesen dann nicht in Byte anzuzeigen, sondern in MB.
Ab einer gewissen Zahlengröße, gibt es bei der Division einen Fehler.
Hat jemand eine Lösung?

@echo off
for /F "delims=" %%a in ('netsh diag show computer /v ^| find "TotalPhysicalMemory"') do call :splitram %%a  
goto :eof


:splitram
set /a mem=%2
set /a mem=%mem%/1024
set /a mem=%mem%/1024
echo Memory: %2 Byte>>Memory_%COMPUTERNAME%.txt
echo Memory: %mem% MB>>Memory_%COMPUTERNAME%.txt



Output1:
Memory: 2146418688 Byte
Memory: 2046 MB

Output2:
Memory: 2683285504 Byte
Memory: -1537 MB


Danke schon mal im vorraus.
Christian

Content-Key: 129653

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

Printed on: April 24, 2024 at 02:04 o'clock

Mitglied: 76109
76109 Nov 18, 2009 at 12:04:03 (UTC)
Goto Top
Hallo swidch!

Der vermeindliche Fehler hängt mit dem Datentyp Long zusammnen.

32-Bit Zahlenwert = 4.294.967.295 = Long von -2.147.483.648 bis +2.147.483.647

Bei der Berechnung ist das (-)Vorzeichen-Bit 31 gesetzt und ergibt zwangsläufig bei einer Berechnung z.B. Division einen -Wert

Gruß Dieter
Member: miniversum
miniversum Nov 18, 2009 at 12:25:51 (UTC)
Goto Top
Die einzige Möglichkeit das in Batch zu machen ist dann der ungenauere weg indem man durch 1000 statt 1024 teilt indem man die letzten 3 stellen abschneidet.
set mem=%mem:~0,-3%

Alternativ kann man systeminfo benutzen. Dort wird der Arbeitsspeicher schon in MB angezeigt.
Member: swidch
swidch Nov 18, 2009 at 12:51:07 (UTC)
Goto Top
An die unscharfe Lösung hab ich auch schon gedacht.
Ebenso an die Alternative mit systeminfo.
Leider liefert mir Systeminfo einen Wert mit einer Huntertertrennung.
Somit kann ich den Wert nicht mehr weiter verarbeiten, außer mir kann jemand sagen wie ich die Hundertertennung weg bekomme...
Member: Biber
Biber Nov 18, 2009 at 13:26:22 (UTC)
Goto Top
Moin swidch,

ich kann zwar als Norddeutscher nur vermuten, was ihr wohl unter einer "Huntertertrennung" versucht zu verbalisieren,
aber falls es nur darum geht, einen Punkt (".") durch gar nichts ("") zu ersetzen, folge dieser Skizze:
(Demo am CMD-Prompt; ">" nicht mit eingeben)
>set "PhysSpeicher=2.028 MB"  
>echo [%PhysSpeicher%] .... [%PhysSpeicher:.=%]
[2.028 MB] .... [2028 MB]

Allgemeinere Hinweise zum Manipulieren von CMD-Variableninhalten unter SET /?

Grüße
Biber