Batch Wenn Ram zu klein, PopFenster und Programm nicht ausführen?

Manaplayer

Cadet 4th Year
Registriert
Juni 2017
Beiträge
92
Hallöchen Leute, ich komme nicht mehr weiter.
Ich versuche ein Script per Batch zu machen, womit ich soweit fertig bin, nur ein Teil davon läuft nicht -
Das Programm,bzw der ganze Vorgang soll nur starten, wenn der freie Arbeitsspeicher dafür auch genug ist (verwende dynamische RamDisk)
for /f %% in ('wmic os get freevirtualmemory /format:value') do ?
Ich hab einiges durchgegoogelt, aber finde nichts womit ich das hinbekomme dass das Script nur dann weitergeht, wenn zB. der freie Ram über 300MB ist, ansonsten soll ein PopFenster kommen oder irgendwas anderes wo ich sehen kann, dass das Programm doch nicht starten wird wegen zu wenig Ram.
Ich bin bei Windows 10
Wenn ihr doch das gesamte Script braucht was ich bisher geschrieben hab, sagt Bescheid. (Es ist ja nur dieser Teil wo es nicht mehr weiterläuft wie geplant)
 
Danke für Deine Antwort.
Wie ich an den Wert komme wieviel Ram ich frei habe, hab ich ja fertig. Nur wenn ich den Wert habe, soll das Script dann schauen ob es zum Beispiel mehr oder weniger als 300MB sind, und nur weitermachen wenn ich über 300MB habe, ansonsten das Script stoppen, am besten mit einer Meldung dass für weitermachen die Speichermenge zu gering war.
Das Script möchte ich im Batch .bat cmd - Format haben. Von vbs hab ich 0 Ahnung und müsste das ganze bisherige Zeug nochmal neu schreiben.
 
Code:
for /f %%a in ('wmic os get freevirtualmemory') do (
set /a FreeMem=%%a
)
if %FreeMem% LSS 300000 goto stop

echo Success
exit

:stop
echo Not enough memory
exit
Nicht gerade sehr schön aber geht.
 
Danke für die nächste Hilfe.
Nur nach "set /a FreeMem=
kommt dann die Ausgabe "Fehlender Operand" (keine Ahnung was das ist) So einigermassen hab ich verstanden wofür jeder einzelne Befehl da ist, nur nicht wo der Fehler liegt.

Bei dem Zitat von G.Threepwood:
Keine Ahnung was Deine Fachausdrücke bedeuten sollen. Ich bin noch bei dem lernen von Batchs noch im Kindergartenstatus.
 
Ignorier den letzten Teil, das ist meine Signatur und nur ein lustiger Spruch, wie ich finde.
Du kannst hier im Forum auch einstellen, dass die Signaturen nicht angezeigt werden sollen.

Wenn du dir mal anguckst, was die Ausgabe vom wmic ist bzw. wie oft die for-Schleife durchlaufen wirst, siehst du, warum diese Fehlermeldung kommt.
Sie ist übrigens nicht schlimm, der Wert wird ja trotzdem richtig gesetzt.
Mit "set /A" sagst du, dass du der Variable einen arithmetischen Ausdruck, sprich eine Zahl in unserem Fall, zuweisen willst.
Da die Ausgabe von wmic aber noch eine Leerzeile am Ende enthält, wird die for-Schleife eben danach noch mal durchlaufen. Und damit bei diesem dritten Durchlauf die Variable nicht wieder mit Nichts überschrieben (also gelöscht) wird, habe ich den Parameter /A verwendet, damit nur bei dem zweiten Schleifendurchlauf auch wirklich die Variable geändert wird.

Ich sag, ja, sauber ist es nicht gerade, aber es funktioniert. Quick and dirty könnte man auch sagen.
 
Der eigentliche Befehl zum Auslesen des Speichers ist in dem genannten Beispiel 'wmic os get freevirtualmemory'. Dieser gibt aber mehrere Zeilen zurück. In der zweiten Zeile steht der noch freie verfügbare Speicher drin und in der dritten Zeile steht eigentlich nichts.
Der Befehl "set /a FreeMem=" sorgt dafür, dass etwas in eine Variable geschrieben wird (in diesem Falle in die Variable FreeMem).
Durch das Konstrukt
Code:
for /f %%a in ('wmic os get freevirtualmemory') do (
set /a FreeMem=%%a
)
wird die Rückmeldung Zeile für Zeile ausgelesen und in die Variable FreeMem geschrieben. Das bedeutet im ersten Durchlauf lautet der Befehl, der dadurch ausgeführt wird "set /a FreeMem=FreeVirtualMemory". Im zweiten Durchlauf, wenn der der freie Speicher zurückgegeben wird, also z.B. "set /a FreeMem=28406884". Im dritten Durchlauf heißt der Befehl dann schließlich "set /a FreeMem=", es kommt nach dem Gleichheitszeichen nichts mehr und das mag er nicht (man sagt im im Prinzip "schreibe mal bitte in die Variable FreeMem" und dann hört man auf). Daher die Fehlermeldung.
Effektiv gesehen macht das aber nichts, in FreeMem steht schlussendlich der noch freie virtuelle Speicher drin. Wie simpsonfan schon sagt, es ist nicht schön, aber es funktioniert.

Zu dem Zitat von G. Threepwood: Das ist seine Signatur von simpsonsfan, hat also nicht mit Thema zu tun ;)

Edit: Da hab' ich zu lange zum tippseln gebraucht :D
 
Wow, danke! Jetzt läufts :)
Danke Leute, nun ist es fertig :daumen:
 
Zuletzt bearbeitet:
Zurück
Oben