BATCH/CMD Variable z1-z100 mit echo ausgeben?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Zunächst mal kurz die Antwort auf deine Frage: >>DelayedExpansions<< ;P

mithilfe von

setlocal enableDelayedExpansion

kannst du Variablen auch mit !var! verzögert auslesen:

@echo off & setlocal enableDelayedExpansion
set "var[0]=test"
set "index=0"
echo !var[%index%]!
:: alternativ ::
call echo %%var[%index%]%%
pause>nul

Jetzt noch kurz zur for-Schleife, mit der du leicht über dein Array iterieren kannst:

:: folgende Zeile ersetzt deinen ganzen vorherigen Code ::
for /L %%i in (0,1,100) do set z%%i=!random!

Hier also ein komplettes Beispiel zum setzten und auslesen deines Arrays: (sinnvoll ist es auch noch, wenn du dir die Länge des Arrays in einer Variablen speicherst)

setlocal enableDelayedExpansion
for /L %%i in (0,1,100) do set z%%i=!random!
for /L %%i in (0,1,100) do echo !z%%i!
pause

(Die delayedExpansion bei random brauchst du, da random sonst direkt durch einen Wert ersetzt wird und nicht bei jedem Schleifendurchlauf neu)

~Tim

Woher ich das weiß:Hobby

MrCommandBlock 
Beitragsersteller
 24.07.2018, 20:25

Hey Herzliches Danke für diese geile Antwort. Hab die ganze Zeit gewartet das mir mal wieder der gute alte Timlg den Hintern rettet!

hab mit bereits gedacht das das mit

setlocal enableDelayedExpansion

gehen muss, hab aber nie damit Programmiert und habe auch keine Ahnung davon. Danke auch für das Script was du direkt geschrieben hast ist echt nett dass du dir so ne mühe machst xP

Danke, hast nen Stern!

1
timlg07  24.07.2018, 08:47

Da du anscheinend einen Sortieralgorithmus programmieren willst, dacht ich mir ich probier des auch mal eben aus:

@echo off & setlocal enableDelayedExpansion & title BUBBLESORT & goto main 
:: BUBBLESORT [by Tim Greller]


:bubblesort Array<Number>
	set /a "%~1.length_m_1=!%~1.length!-1"
	for /L %%C in (0,1,!%~1.length!) do (
		for /L %%i in (0,1,!%~1.length_m_1!) do (
			call :_bubblesort %1 %%i
		)
	)
exit /B

:_bubblesort
	set /a "i_p_1=%2+1"
	if !%~1[%2]! GTR !%~1[%i_p_1%]! (
		set "temp=!%~1[%2]!"
		set "%~1[%2]=!%~1[%i_p_1%]!"
		set "%~1[%i_p_1%]=!temp!"
	)
exit /B

:print Array<>
	for /L %%i in (0 1 !%~1.length!) do echo:%~1[%%i] = !%~1[%%i]!
exit /B

:main
	set "list.length=8"
	for /L %%i in (0 1 %list.length%) do set "list[%%i]=!random:~0,2!"

	call:print list
	echo:__________
	echo:
	echo:SORTING...
	echo:__________
	call:bubblesort list
	call:print list

	pause:nul
exit

leider muss man die zweite for-schleife auslagern, da man in Batch nicht direkt rechnen kann und deswegen %%i+1 als neue Variable definieren muss (diese müsste man in der for-Schleife verzögert auslesen, wodurch sich der Array-Inhalt nicht mehr auslesen lassen könnte).

0

Beschreib mal ganz genau was du ausführen willst, mit mehr Infos könnte man dehn Code ändern aber das deine Batch Datei immer noch deine Bedingung erfüllt wird


MrCommandBlock 
Beitragsersteller
 23.07.2018, 17:16

Folgendes:

Ich habe mit einer Schleife die Variable z1 bis z100 gesetzt.

Also:

set z1=%random%
set z2=%random%
...
set z100=%random%

Das Ganze in einer Schleife dass ich nicht jede Variable selbst sezen muss:

set c=0
:a
set c=%c%+1
set z%c%=%random%
if "%c%"=="100" goto next
goto a

Ich hoffe das hast du verstanden...

Jetzt möchte ich den ganzen Kram von den Einzelnen Variablen wieder ausgeben lassen:

echo %z1%
echo %z2%

allerdings "echo %z%c%%" funktioniert nicht und da ist auch das Problem: Wie bekomme ich per Schleife die Ganzen Variablen wieder ausgegeben????

Ich hoffe das jetzt nicht von dir kommt "da kann ich dir nicht weiterhelfen"...

Aber danke für deine Antwort wäre nice wenn du ne lösung hättest :D

0
Pinguingottin  23.07.2018, 18:17
@Pinguingottin

Ich mach zwar f´nur C++ und kein CMD aber um die zahlen zu erhöhen würde ich das Vermuten

SET VARIABLE=1

:B

echo %VARIABLE%

SET /A VARIABLE=VARIABLE+1

echo %VARIABLE%

goto B

0
MrCommandBlock 
Beitragsersteller
 23.07.2018, 22:21
@Pinguingottin

rly? Hast du überhaupt meine Frage verstanden?

Also nochmal: Ich bin dabei einen Algorithmus zu schreiben, der mir beliebige Viele Zahlen nach der Größe Sortiert. Dabei schaut das Script sich die einzelnen Zahlen an und vergleicht sie mit der nächsten Zahl. Wenn die erste Zahl größer ist als die 2. Werden die 2 Zahlen vertauscht usw.... so läuft das 20x durch eine Schleife und zum Schluss sind die Zahlen nach Größe sortiert.

Problem ist jetzt das ich innerhalb einer schleife mit *einem Befehl (ein Echo)* alle Zahlen ausgeben.

Die Zahlen sind in z(Nummer) gespeichert. Z.B.

  • Zahl1 hat die Variable z1
  • Zahl100 hat die Variable z100
  • usw die Variablen wurden durch Folgende Schleife generiert:
set c=0
:rndgen
  set randm=%random% %%9
  set /a z%c%=%randm%+1
set /a c=%c%+1
if "%c%"=="%count%" set c=0 && goto calc
goto rndgen

Wie Verarbeite ich diese Variablen weiter? <- Das ist die Frage

if "%z%c%%"=="..." goto ... ->Fu- Das ist die Fragenktioniert nicht
echo %z%c%% ->geht auch nicht

Also sozusagen habe ich das Problem das ich keine Variable in einer Variable einfügen kann.

Wie man in Batch Rechnet weiß ich selbst... ;)

0