Wie kann ich meinen RAM mit einer Batchfile auslesen?
Hallo, Allerseits.
Ich möchte ein kleines Programm per Batch programmieren. dort soll unter anderem der RAM angezeigt werden. Ich habe schon bei anderen Foren geguckt, bin aber irgendwie nicht schlau daraus geworden. Am Ende möchte ich, das der Ram mit einem echo Befehl Angezeigt werden soll, der ungefähr so Aussehen soll:
Meine Frage: wie definiere ich %RAM_AMOUNT%?
echo RAM: %RAM_AMOUNT% KB
2 Antworten
Einfach der Variable zuweisen.
Entschuldigung; ich habe erst gestern angefangen.
Alles gut. :-)
Z.B.
wmic ComputerSystem get TotalPhysicalMemory > var
Ausgabe von %var%:
TotalPhysicalMemory
14962454528
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.
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.
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
Solltest du lediglich über %var% ohne echo ausgeben können.
Warum eigentlich über CMD? Wäre doch mit PowerShell viel einfacher und produktiver?
Hmm. Ich wusste nur das es bei Powershell mehr Befehle gibt; was ist denn da produktiver?
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.
Ok. Es funktioniert. Aber funktioniert es auch unter CMD? wenn nicht, dann müsste ich doch das Programm komplett neu schreiben, oder?
Richtig, müsstest du. Ist aber nicht zu viel Arbeit und angenehmer im Nachhinein. Einige Befehle kann PowerShell von CMD übernehmen und ausführen.
Und ich müsste eine neue Sprache lernen. Kannst du mir vielleicht einen Grundkurs empfehlen?
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.
Kannst du mir den discord Link schicken?
Trotzdem: Kannst du mir den Code für CMD schicken?
Welchen Discord Link? Meinst du für die App?
http://discordapp.com/
Ansonsten halt über einen privaten Chat.
Wo hattest du denn den Code von mir hingeschrieben?
Den hier in die Powershell:
$pattern = '[^0-9]'
[string] $var = ((wmic ComputerSystem get TotalPhysicalMemory) -replace $pattern)
[double] $var = $var
in cmd. Aber ich kann, wie gesagt, "var" nicht auslesen.
Du müsstest es nicht mal als Variable speichern. Einfach
wmic ComputerSystem get TotalPhysicalMemory
eingeben. Das reicht und wirft das gewünschte Ergebnis aus.
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.
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.
Dann müsstest du Replacen und Converten. Das wird aber mit CMD/Batch nichts.
d.h. es ist mit CMD nicht möglich?!
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.
Ich habe noch eine Idee: ich kann Das vielleicht einschieben.
Ich habe es jetzt eingeschoben. funktioniert. Ich hätte noch eine Frage: Wie kann ich die Windows Edition herausfinden (home, enterprise, pro, usw)?
Google dazu mal WMIC. https://www.lisenet.com/2014/get-windows-system-information-via-wmi-command-line-wmic/
Hier stehen einige Sachen.
wmic OS get Caption
Und den RAM in GB auslesen? Geht das ohne großen Aufwand?
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.
OK. Aber kann ich ohne Zeilenumbruch dahinterschreiben in welchem Format die Angabe ist?
@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
Ok. Den Befehl hab ich schon ausprobiert. Wie kann ich das denn jetzt in die Beispielvariable reinschreiben?