yperiu
Goto Top

Verschachtelte For Schleife für Batch Neuling

Hallo liebe Profis,

ich habe eine sehr umfangreiche Benchmark-Schleife zum Laufen zu bringen, die ich ohne For 72 mal erstellen müßte:

Bisher mache ich das in Excel, kopiere es ins Word und von da speichern als .txt und dann extension in .bat, s.a. Bild - Aber so ist das doch völlig abartig und wirklich nicht mehr zu bearbeiten...... ;-((

Mit einer verschachtelten For Anweisung kann das doch sicherlich viel einfacher gelöst werden....

(Die sich verändernden Parameter habe ich mit ->> und <<- umschlossen, damit deutlich wird, was in die FOR Anweisung kommt)

SET RESULTDIR7="X:\z_results\___ Lenovo Z50\pc mark 7"  
SET RESULTDIR8="X:\z_results\___ Lenovo Z50\pc mark 8"  

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

PCMark.exe -repeat=3 -all=off -hdd=on LenZ50-hddo-->>00128<<- - ->>512<<--%AnzProgFreeRAM%.pcr
PCMark7Cmd.exe --secondarystorage=on --storagepath=C:\ --out=%RESULTDIR7%\LenZ50-hddo-->>00128<<- - ->>512<<--%AnzProgFreeRAM%.pcmark-7-result
PCMark8Cmd.exe --storage=on --storagepath=C:\ --out=%RESULTDIR8%\LenZ50-storage-->>00128<<- - ->>512<<--%AnzProgFreeRAM%.pcmark-8-result

rxpcc perf -a
 
:: ---Durchlauf 1,2---
echo %date:~0% - %time:~0,5%
rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m ->>128<<- -b ->>256<<- -s
rxpcc ls

xxx

PCMark.exe -repeat=3 -all=off -hdd=on LenZ50-hddo-00128-256-%AnzProgFreeRAM%.pcr
PCMark7Cmd.exe --secondarystorage=on --storagepath=C:\ --out=%RESULTDIR7%\LenZ50-hddo-00128-256-%AnzProgFreeRAM%.pcmark-7-result
PCMark8Cmd.exe --storage=on --storagepath=C:\ --out=%RESULTDIR8%\LenZ50-storage-00128-256-%AnzProgFreeRAM%.pcmark-8-result
 
rxpcc perf -a
 
REM ---Durchlauf 1,3---
echo %date:~0% - %time:~0,5%
rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m ->>128<<- -b ->>128<<- -s
...

Und so geht das dann immer weiter.

For Schleife1-Werte:
  • 128
  • 256
  • 512
  • 1024
  • 2048
  • 4096
  • 8192
  • 14500

For Schleife2-Werte
  • 512
  • 256
  • 128
  • 64
  • 32
  • 16
  • 8
  • 4

anstelle der xxx steht:

: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

for /f %%i in ('TASKLIST /NH ^| FIND /C ".exe"') do Set AnzahlProgs=%%i  
if %AnzahlProgs% LSS 100 set AnzahlProgs=0%AnzahlProgs%

set "AnzProgFreeRAM=%AnzahlProgs%-%AvailableMemory%-%UsedPercent%%%"  

(alles nicht von mir, mühsam zusammengegoogelt - Ich habe das extra aufgeführt, damit es nicht zu unübersichtlich ist.)

Ich bräuchte eigentlich nur Unterstützung bei dem hier - Ich komme von BASIC (eeeewig her) und Visual Basic her und von da kann ich:

Dim MB(1 to 8), BS(1 to 8)

MB(1)=128, MB(2) = 256, ... MB(8) =14500
BS(1)= 512, BS(2) =256,  ... BS(8) = 4

For I = 1 to 8
For J = 1 to 8

rxpcc edit {86DC2354-794E-4CBD-89FF-45DE934F907E} -m MB(I) -b BS(J) -s

Next I
Next J

Könnte mir bitte jemand das für eine Batch-Datei erklären? Mir reichen die verschachtelten For Schleifen und das SET für die Array-Variablen - den Rest (noch in die DateiNamen einzubauen), schaffe ich sicherlich selbst.

Vielen Dank fürs Lesen, Eindenken und Antworten!
yperiu
ashampoo_snap_2017.02.24_00h32m25s_003_

Content-Key: 330349

Url: https://administrator.de/contentid/330349

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: coltseavers
coltseavers 24.02.2017 um 02:13:02 Uhr
Goto Top
Hi ho,

hilft das hier vielleicht weiter?

For-Schleifen in Batch Tutorial

Gruß,
Colt
Mitglied: rubberman
rubberman 24.02.2017 um 21:05:21 Uhr
Goto Top
Hallo yperiu.

Im Grunde reichen 2 FOR Schleifen in die du die Werte packst. Für jedes resultierende Wertepaar rufst du ein Label auf (call :Sub). Das ist vergleichbar mit dem Aufruf einer Funktion in VB. Übergebene Argumente kannst du mit %1 bis %9 abgreifen. Mit exit /b beendest du die Subroutine und kehrst zum Aufruf zurück. Also auch wie bei einer Funktion.
Beispiel:
@echo off &setlocal

for %%i in (128 256 512 1024 2048 4096 8192 14500) do (
  for %%j in (512 256 128 64 32 16 8 4) do (
    call :sub %%i %%j
  )
)
pause

::hier wird der Hauptcode beendet und somit die Ausführung der Batchdatei:
exit /b

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:sub

echo Mach was mit %1 und %2

:: Hier wird die Subroutine beendet und zu ihrem Aufruf im Hauptcode zurückgekehrt:
exit /b

%%i und %%j wird nacheinander die im Schleifenkopf stehenden Werte zugewiesen. Beim Aufruf der Subroutine übergibst du sie leerzeichengetrennt. In der Subroutine hast du sie als Parameter %1 und %2 anliegen. Das heißt, dort platzierst du den Code für die Verarbeitung eines Wertepaares und setzt %1 und %2 an den entsprechenden Stellen ein.

Grüße
rubberman
Mitglied: yperiu
yperiu 24.02.2017 aktualisiert um 23:35:14 Uhr
Goto Top
Vielen Dank colt, ist schon sehr umfangreich, ich tendiere eher zur rubberman Lösung.

Ganz herzlichen Dank Rubberman, das ist genau, was ich gebraucht habe, ich werde es morgen ausprobieren und mich dann nochmal melden.

Ich falle jetzt bloß noch ins Bett, zwei Nächte bis 05:00 morgens benchmarken gehen dann auch bei mir mal an die Substanz.

Es fühlt sich so gut an, was Du mir da geschrieben hast - bin gespannt auf die Umsetzung!

Herzliche Grüße

yperiu