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)
Und so geht das dann immer weiter.
For Schleife1-Werte:
For Schleife2-Werte
anstelle der xxx steht:
(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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 330349
Url: https://administrator.de/forum/verschachtelte-for-schleife-fuer-batch-neuling-330349.html
Ausgedruckt am: 17.02.2025 um 00:02 Uhr
3 Kommentare
Neuester Kommentar
Hallo yperiu.
Im Grunde reichen 2 FOR Schleifen in die du die Werte packst. Für jedes resultierende Wertepaar rufst du ein Label auf (
Beispiel:
Grüße
rubberman
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