Wie kann ich meinen RAM mit einer Batchfile auslesen?

2 Antworten


AllesKaese3 
Beitragsersteller
 14.05.2020, 12:35
Hier der gesamte Quelltext

Ich wollte ein Programm programmieren, mit dem man Nachdem man Windows installiert hat, direkt standartprogramme installieren und sich die Systeminfos Anzeigen lassen kann. (Ganz unten unter esi.)



set Customer=ebay
@echo off
@title Instalation Assistant for %Customer%
mode 9
%TotalVisibleMemory% / 1000000 = RAMGB




:main
cls
echo Welcome to the installation assistant for %Customer%
echo What do you want to install?
echo.
echo.
echo [c] = Google Chrome
echo [r] = Adobe Reader
echo [e] = Chrome, Reader
echo [f] = Mozilla Firefox
echo.
echo.
echo ............................Other options............................
echo.


echo [s] = Settings
echo [X] = Exit
echo [info] = Info


echo.
echo.
echo Your choice:


set/p Klick=


if %Klick%==c goto c
if %Klick%==r goto r
if %Klick%==e goto e
if %Klick%==s goto xyz
if %Klick%==X goto exit
if %Klick%==reload goto reload
if %Klick%==re goto reload
if %Klick%==info goto info
goto errtype1




:errtype1
cls
echo OOOOOPS! Unfortunately, we couldn't proceed your choice.
echo.
echo err-code: 1 (Undefined Key)
pause 
goto main






:c
cls


start /max https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7B6CE3B2C5-8E12-32C6-E1F3-358DD28F9689%7D%26lang%3Den%26browser%3D4%26usagestats%3D1%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26ap%3Dx64-stable-statsdef_1%26installdataindex%3Dempty/update2/installers/ChromeSetup.exe
echo downloading Google Chrome...
timeout /T 4
cls
echo done downloading.
pause
goto Main


:r
cls
start /max https://admdownload.adobe.com/bin/live/readerdc_de_a_install.exe
echo downloading Adobe Reader...
timeout /T 4
cls
if EXIST readerdc_de_a_install.exe echo done downloading.
pause
goto Main


:e
cls
start https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7B6CE3B2C5-8E12-32C6-E1F3-358DD28F9689%7D%26lang%3Den%26browser%3D4%26usagestats%3D1%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26ap%3Dx64-stable-statsdef_1%26installdataindex%3Dempty/update2/installers/ChromeSetup.exe
echo downloading..
timeout /T 4
echo done downloading
echo.
echo If you Want to download Adobe Reader, press any key.
pause
goto ee


:ee
cls
start https://admdownload.adobe.com/bin/live/readerdc_de_a_install.exe
echo downloading Adobe Reader...
timeout /T 4
cls
pause
goto main


:xyz
echo Settings:






  
:reload
cls
start %USERPROFILE%\Desktop\Installationsassistent.bat
reloading...
timeout /T 3
goto exit


:exit
exit




: info


cls
echo Info:
echo. 
echo v2.1
echo [ESI] = Extended Systeminfo




set/p Klick2=


if %Klick2%==ESI goto esi
pause
goto main


:esi
cls
echo Extended Systeminfo
echo Username: %USERNAME%
echo OS: %OS%
echo Number of Processors: %NUMBER_OF_PROCESSORS%
echo RAM: %RAMGB% GB (%TotalVisibleMemory% KB)
echo Homedrive: %HOMEDRIVE%


echo []
echo.
pause
goto main


Dultus  14.05.2020, 12:40
@AllesKaese3

Solltest du lediglich über %var% ohne echo ausgeben können.

Warum eigentlich über CMD? Wäre doch mit PowerShell viel einfacher und produktiver?

AllesKaese3 
Beitragsersteller
 14.05.2020, 12:42
@Dultus

Hmm. Ich wusste nur das es bei Powershell mehr Befehle gibt; was ist denn da produktiver?

Dultus  14.05.2020, 12:55
@AllesKaese3

Es ist wesentlich einfacher zu lernen und umzusetzen.

Du kannst einfach den Output Pipen und ausgeben und einfach in eine Variable legen.

Beispiel:

$pattern = '[^0-9]'
[string] $var = ((wmic ComputerSystem get TotalPhysicalMemory) -replace $pattern)
[double] $var = $var

Ausgabe von $var = 14962454528

In Batch benötigst du riesige Codezeilen für sehr simple Dinge.

AllesKaese3 
Beitragsersteller
 14.05.2020, 12:59
@Dultus

Ok. Es funktioniert. Aber funktioniert es auch unter CMD? wenn nicht, dann müsste ich doch das Programm komplett neu schreiben, oder?

Dultus  14.05.2020, 13:02
@AllesKaese3

Richtig, müsstest du. Ist aber nicht zu viel Arbeit und angenehmer im Nachhinein. Einige Befehle kann PowerShell von CMD übernehmen und ausführen.

AllesKaese3 
Beitragsersteller
 14.05.2020, 13:03
@Dultus

Und ich müsste eine neue Sprache lernen. Kannst du mir vielleicht einen Grundkurs empfehlen?

Dultus  14.05.2020, 13:06
@AllesKaese3

Siehe mein Profil. :-)

Ich helfe gerne dabei, wenn gewünscht. Hierbei hast du eine OOP - also Objektorientierte Programmiersprache.

Einige Sachen dazu muss man lernen, helfe aber gerne dabei. Am liebsten über Try und Fail.

Du fragst, was du haben willst, ich erkläre es dir und du setzt es um - (Textuell über Discord zum Beispiel.)

Ansonsten gibt es Tutorials verstreut im Netz. Auch über LinkedIn.

AllesKaese3 
Beitragsersteller
 14.05.2020, 13:07
@Dultus

Kannst du mir den discord Link schicken?

AllesKaese3 
Beitragsersteller
 14.05.2020, 13:29
@Dultus

Den hier in die Powershell:

$pattern = '[^0-9]'
[string] $var = ((wmic ComputerSystem get TotalPhysicalMemory) -replace $pattern)
[double] $var = $var
Dultus  14.05.2020, 13:31
@AllesKaese3

Ich meinte den;

wmic ComputerSystem get TotalPhysicalMemory > var
AllesKaese3 
Beitragsersteller
 14.05.2020, 13:32
@Dultus

in cmd. Aber ich kann, wie gesagt, "var" nicht auslesen.

Dultus  14.05.2020, 13:38
@AllesKaese3

Du müsstest es nicht mal als Variable speichern. Einfach

wmic ComputerSystem get TotalPhysicalMemory

eingeben. Das reicht und wirft das gewünschte Ergebnis aus.

Dultus  14.05.2020, 13:39
@AllesKaese3

Discord hast du schon mal genutzt?
Du musst mich bei Discord einfach über meinen Nick als Freund hinzufügen, dann nehme ich an und wir können chatten.

AllesKaese3 
Beitragsersteller
 14.05.2020, 13:44
@Dultus

Hab ich schon probiert. Das hört sich jetzt vielleicht banal an, aber bei den anderen Infos gibt es, im gegensatz zu dem Befehl, kein Zeilenumbruch. ich würde es gerne Einheitlich machen. Und Außerdem ist es so unübersichtlicher. Deshalb ja auch mit der Variable.

Dultus  14.05.2020, 13:45
@AllesKaese3

Dann müsstest du Replacen und Converten. Das wird aber mit CMD/Batch nichts.

Dultus  14.05.2020, 13:47
@AllesKaese3

Nein. Dafür ist CMD nicht ausgelegt. Bzw, es geht soweit in eine wirklich verwirrende Tiefe in einem Workaround, bei der ich dir nicht helfen kann.

AllesKaese3 
Beitragsersteller
 14.05.2020, 13:51
@Dultus

Ich habe noch eine Idee: ich kann Das vielleicht einschieben.

AllesKaese3 
Beitragsersteller
 14.05.2020, 13:55
@Dultus

Ich habe es jetzt eingeschoben. funktioniert. Ich hätte noch eine Frage: Wie kann ich die Windows Edition herausfinden (home, enterprise, pro, usw)?

AllesKaese3 
Beitragsersteller
 14.05.2020, 14:04
@Dultus

Und den RAM in GB auslesen? Geht das ohne großen Aufwand?

Dultus  14.05.2020, 14:14
@AllesKaese3

Dafür müsstest du das Objekt des wmic des RAMs auslesen und teilen. Funktioniert aber nicht, da du dann wieder separieren musst und WMIC in Byte ausgibt.

AllesKaese3 
Beitragsersteller
 14.05.2020, 14:23
@Dultus

OK. Aber kann ich ohne Zeilenumbruch dahinterschreiben in welchem Format die Angabe ist?

AllesKaese3 
Beitragsersteller
 14.05.2020, 12:27

Ok. Den Befehl hab ich schon ausprobiert. Wie kann ich das denn jetzt in die Beispielvariable reinschreiben?

Dultus  14.05.2020, 12:35
@AllesKaese3

Alles gut. :-)

Z.B.

wmic ComputerSystem get TotalPhysicalMemory > var

Ausgabe von %var%:

TotalPhysicalMemory
14962454528

AllesKaese3 
Beitragsersteller
 14.05.2020, 12:38
@Dultus

Wie kann ich dann %var% auslesen? hab es gerade mit echo probiert; und es hat mir %var% angezeigt. Was mache ich falsch? Ich habe beide Befehle ausgeführt.

AllesKaese3 
Beitragsersteller
 14.05.2020, 12:41
@AllesKaese3

Ich weiß zwar das ich 8 gb RAM habe, aber wenn man Rechner neu installiert weiß man das ja ohne Win + pause oder win+ x ->System ja nicht. Ich will alles an einem Platz haben.

@echo off
for /f "tokens=*" %%a in ('wmic os get FreePhysicalMemory^,FreeVirtualMemory^,TotalVirtualMemorySize^,TotalVisibleMemorySize /value ^|find "="') do (
  set /a "__%%a"
)
  rem (kann weg) erzeugte Varablen anzeigen: 
echo gesetzte Variablen:
set "__"
echo:


echo Gesamt Physikalischer Speicher : %__TotalVisibleMemorySize% kByte
echo Freier Physikalischer Speicher : %__FreePhysicalMemory% kByte
echo Gesamt virtueller Speicher     : %__TotalVirtualMemorySize% kByte
echo Freier virtueller Speicher     : %__FreeVirtualMemory% kByte


pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren