Zum Inhalt wechseln


Foto

Ausgabe von tasklist | find in Variable übergeben


  • Bitte melde dich an um zu Antworten
4 Antworten in diesem Thema

#1 Hyperionnn

Hyperionnn

    Newbie

  • 3 Beiträge

 

Geschrieben 23. Februar 2017 - 16:52

Hallo liebe Programmierprofis,

 

DOS ist für mich 20 Jahre her und ich bekomme es einfach nicht selber gebacken.

 

Für einen komplexe Benchmarklauf brauche ich die Anzahl der laufenden Programme, die dann über die Batch-Datei den Namen des Ergebnisses entsprechend festlegt:

 

Ich kriege es einfach nciht hin, ich hab auch noch nie mit Find und for und Tasklist gearbeitet - hab mir das alles zusammengegooglet - wahrscheinlich ist es nur eine Kleinigkeit:

@echo off
setlocal

:GetTotalMemory
for /F "skip=1" %%M in ('%SystemRoot%\System32\wbem\wmic.exe ComputerSystem get TotalPhysicalMemory') do set "TotalMemory=%%M" & goto GetAvailableMemory
:GetAvailableMemory
for /F "skip=1" %%M in ('%SystemRoot%\System32\wbem\wmic.exe OS get FreePhysicalMemory') do set "AvailableMemory=%%M" & goto ProcessValues
:ProcessValues
set "TotalMemory=%TotalMemory:~0,-6%"
set /A TotalMemory/=1073
set /A TotalMemory*=1024
set /A AvailableMemory/=1024
set /A UsedMemory=TotalMemory - AvailableMemory
set /A UsedPercent=(UsedMemory * 100) / TotalMemory

:echo Free memory:    %AvailableMemory% MB
:echo Total memory:   %TotalMemory% MB
:echo Used memory:    %UsedMemory% MB
:echo Memory usage:   %UsedPercent% %%

:::::::hier wirds noch korrekt ausgegeben - fällt dann weg, wenns funktioniert
TASKLIST /NH | FIND /C ".exe"
:pause - fällt dann weg, wenns funktioniert


REM -------------- HIER ist das Problem ------------------------
for /f %%i in ('TASKLIST /NH | FIND /C ".exe"') do Set AnzahlTasks=%%i
:::::::: Hier bricht die Batch ab

:pause - fällt dann weg, wenns funktioniert
:echo %AnzahlTasks% - fällt dann weg, wenns funktioniert
set "DateiName7=PCMark7Cmd.exe --secondarystorage=on --storagepath=C:\ --out=%RESULTDIR%\LenZ50-hddo-01024-064-%AnzahlTasks%-%AvailableMemory%-%UsedPercent%.pcmark-7-result"
:echo %DateiName7% - fällt dann weg, wenns funktioniert

echo %date:~0% - %time:~0,5%
rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m 8192 -b 512 -s
rxpcc ls

PCMark.exe -repeat=3 -all=off -hdd=on LenZ50-hddo-08192-512-50-06904.pcr

:::::::::::::: da muß DateiName7 rein!
PCMark7Cmd.exe --secondarystorage=on --storagepath=C:\ --out=%DateiName7%

PCMark8Cmd.exe --secondarystorage=on --storagepath=C:\ --out=LenZ50-hddo-08192-512-50-06432.pcmark-8-result

rxpcc perf -a

echo %date:~0% - %time:~0,5%
rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m 8192 -b 256 -s
rxpcc ls

:...
:...rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m 8192 -b 128 -s
:...rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m 8192 -b 064 -s
:...rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m 8192 -b 032 -s :...
:...

endlocal

(Die Aufteilung in 2 Teile ist keine Absicht, irgendwas mit dem Code einfügen hab ich falsch gemacht, sorry)

 

Wie bekomme ich hier

set "DateiName7=PCMark7Cmd.exe --secondarystorage=on --storagepath=C:\ --out=%RESULTDIR%\LenZ50-hddo-01024-064-%AnzahlTasks%-%AvailableMemory%-%UsedPercent%>>>hier<<<.pcmark-7-result"

noch ein reales %-Zeichen hin?

 

Ich würde mich sehr freuen, wenn mir jemand helfen könnte... Sollte noch anderes drin sein, was unnötig ist, und ich nicht erkenne, bin auch dafür für Hinweise dankbar.

 

Vielen herzlichen Dank fürs Lesen, Eindenken und Antworten!

 

Elmar


Bearbeitet von Hyperionnn, 23. Februar 2017 - 16:53.


#2 daabm

daabm

    Expert Member

  • 2.110 Beiträge

 

Geschrieben 23. Februar 2017 - 18:44

Escaping auf der Commandline ist immer lustig  - mal ist es ein Backtick, mal ein Caret. Ich glaub hier brauchst Du das Caret: ^%


Greetings/Grüße, Martin

Mal ein gutes Buch über GPOs lesen? Oder ein kleines, aber feines Blog darüber?

Und wenn mir die IT mal auf die Nerven geht - coke bottle design refreshment (-:


#3 Hyperionnn

Hyperionnn

    Newbie

  • 3 Beiträge

 

Geschrieben 23. Februar 2017 - 19:59

Dankeschön. Ich werde es ausprobieren. Für mein anderes Problem hast Du keine Lösung?



#4 massaraksch

massaraksch

    Newbie

  • 152 Beiträge

 

Geschrieben 23. Februar 2017 - 21:16   Lösung

Hi,

 

bei Problemen einfach mal den Befehl direkt im CLI testen...

E:\>for /f %i in ('TASKLIST /NH | FIND /C ".exe"') do Set AnzahlTasks=%i
"|" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Aha?

E:\>for /f %i in ('TASKLIST /NH ^| FIND /C ".exe"') do Set AnzahlTasks=%i
E:\>Set AnzahlTasks=76
E:\>echo %AnzahlTasks%
76

Voila! Das Pipe-Zeichen "escapen" mit ^

 

(nicht wundern... in der Batch natürlich wieder doppelte % nutzen)


mfg, massaraksch

#5 Hyperionnn

Hyperionnn

    Newbie

  • 3 Beiträge

 

Geschrieben 23. Februar 2017 - 21:48

Jaaaaaaaaaaaaaaaaaaa!!!!

 

Das wars - Hurraaaaaaaaa!

 

Da wär ich nie-nie-nie draufgekommen - ganz herzlichen Dank!!! Da kann ich jetzt endlich die nächste Benchmarkrunde durchlaufen lassen.

 

Und ich habe für meinen Sohn wieder viel mehr Zeit.

 

:thumb1:   :jau:   :thumb1: