Batch RAM auslesen, mit 1,5 multiplizieren, reg Datei eintragen

black_assassin

Lieutenant
Registriert
Mai 2012
Beiträge
788
Hallo Leute,

ich sitze gerade in der Arbeit vor folgendem Problem:

Ich soll eine Batch Datei erstellen, dass den eingebauten RAM ausliest, diesen mit 1,5 multipliziert und diesen Wert dann als Auslagerungsdatei festlegt. Die Werte kriege ich mit

Code:
WMIC memorychip get capacity > c:\mem1.txt

schon mal in eine TXT Datei. Soweit so gut. Nur steht dann über den beiden Werten der RAM Riegel noch Capacity und ich weiß auch nicht, wie ich die Werte ansprechen kann.

Als Beispiel für den Wert "RAM mal 1,5" nehme ich jetzt einfach mal 4000. Mit folgenden Befehl könnte ich dann in die Registry schreiben (Pfad wird natürlich noch angepasst):

Code:
REG ADD HKLM\SYSTEM\Test /v PagingFiles /t REG_MULTI_SZ /d "\??\C:\pagefile.sys 4000 4000\0\??\D:\pagefile.sys 4000 4000"

Die 4000 könnte ich ja mit der variable %wert% ersetzen die eben "%wert%=RAM*1,5" darstellt, aber wie bekomme ich den Wert ausgerechnet?
 
Wieso muss es eine Batch Datei sein, wieso nicht .VBS, Powershell, etc.?
 
Weil die Batch in BatchPatch verwendet werden soll um PC schneller zu konfigurieren.
 
Der gesamte Speicher soll ausgerechnet werden, z.B. bei einem PC mit zwei 2 GB Riegeln dann 4 GB. Dann soll mit 1,5 multipliziert werden: 4*1,5= 6 GB Auslagerungsdatei.

Mit call systeminfo wird mir nur der verwendbare RAM angezeigt, also knapp 3800 MB statt 4096...
 
Bitte nochmals die Eingaben prüfen. Es wird der gesamte physikalische Speicher angezeigt (was verbaut ist) und nicht der verfügbare..

Mit diesem Befehl kann beides angezeigt werden :
Code:
call systeminfo | findstr /C:"Speicher:"
 

Anhänge

  • speicher.gif
    speicher.gif
    3,1 KB · Aufrufe: 160
Nur mal so als Hinweis: Mit dem Rechnen kannst du es gleich vergessen. Batch versteht nur 32 Bit Ints, ergo ist bei 2^31 - 1 Schluss ( 2.147.483.647 = 2 GB).

Code:
powershell "((& systeminfo | select-string 'gesamter physischer speicher' )) -match '(?<x>[0-9\.]+)' | out-null; [long]([double]$Matches.x * 1gb)"
Nutz die PowerShell in der Batch und gut ist. Die Zahl kannst du dir dann in ne Datei umleiten und per Batch daraus lesen.
 
Vielen Dank für den Hinweis Yuuri, dein Skript funktioniert schon mal, aber wie kriege ich den Wert in eine Textdatei? Könntest du mir dein Skript vllt erklären, ich steige da nicht ganz durch...

Leider komme ich weder bei der Powershell noch bei CMD auf die 4096 MB sondern nur auf 4221952852 Bytes bzw. 3932 MB
 
Zuletzt bearbeitet:
Code:
powershell "((& systeminfo | select-string 'gesamter physischer speicher' )) -match '(?<x>[0-9\.]+)' | out-null; [long]([double]$Matches.x * 1gb)" > ram.txt
set /P ram=<ram.txt
Und schon hast du die Größe in %ram% liegen.
 
Das Batch-Ergebnis ist nicht 100%ig genau, aber vielleicht kann man damit leben. Man rechnet nicht mit Bytes sondern mit KB und mit ganzen Zahlen

Code:
@echo off &setlocal disabledelayedexpansion
for /f %%a in ('WMIC memorychip get capacity ^| findstr [0-9]') do (
	set "bCapacity=%%~a"
	call set "mCapacity=%%bCapacity:~0,-3%%"
	set /a Capacity+=mCapacity
)

set /a NewCapacity = (Capacity * 15) / 10
set "NewCapacity=%NewCapacity%000"
echo %NewCapacity%
 
nicht, dass sowas auch per Batch unmöglich wäre,

Code:
@Echo OFF
For /F "Tokens=4 Delims=: " %%a IN ('Systeminfo ^| findstr /C:"Gesamter physischer Speicher"') DO Set MEM=%%a
Echo %MEM% vorhanden

For /F "Tokens=1,2 Delims=." %%a IN ("%MEM%") DO Set MEM=%%a%%b
 Set /a "NEU=MEM*15"
  Set /a "MEM=NEU/10
Echo %MEM% vorhanden

Pause

ist aber sehr umständlich.
 
Zuletzt bearbeitet:
Zurück
Oben