cmd-Batch: Syntax "Array anzeigen"?

2 Antworten

Irgendwie scheinst du die Sache mit den Parametervariablen (%%a, %%b usw.) nicht ganz verstanden zu haben.

Diese funktionieren nur in einem for-Loop.

Außerhalb eiens for-Loop gibt es nur ganz normale Variablen mit der Notation %var%, oder %a% usw..

@echo off
set a=1
set b=10
set "array.%a%=%b%"
 rem  geht zwar, macht man  aber es wenn man die gleiche Variable nur veächer  verwendet  man eine andere Notation...  
set /a a=a+1
set /a b=b+1
set "array.%a%=%b%"
 rem  so ist es schon eleganter...
set /a a+=1
set /a b+=1
set "array.%a%=%b%"
 rem beide Operationen mit einem Aufruf ausführen ist richtig schnell...
set /a "a+=1  , b+=1"
set "array.%a%=%b%"
call echo "%%array.%a%%%"


echo Mal alle variablen des (Pseudo)Arrays  anzeigen:
set "array."
pause

Wie erwähnt gibst nur in for-Loops %%x-Variablen:

@echo off
set "Count=1"
set "MyNumber=10"
for /l %%a in (%Count%,1,9) do (
  rem für set/a gilt das Problem mit den Variablen innerhlb eines Klammerblocks nicht, wenn man diese ohne %-Zeichenverwendet (Ausnahme %Random%)
 set /a "MyNumber+=1 , Count=%%a"
 set /a "array.%%a=MyNumber"
)
call echo "%%array.%Count%%%"

echo Mal alle variablen des (Pseudo)Arrays anzeigen:
set "array."
pause

ist natürlich schwachfug, ich würde es so machen:

@echo off
set "Count=1"
for /l %%a in (%Count%,1,20) do (
 set /a "array.%%a=%%a+10 , Count+=1"
)
call echo "%%array.%Count%%%"
echo Mal alle variablen des (Pseudo)Arrays anzeigen:
set "array."
pause

Ich weiß nicht, ob ich Dir schon den guten Rat gegeben habe Batch an den Nagel zu hängen? Batch kann mit seinen verworrenen Regeln und Ausnahmen von den Regeln und Ausnahmen von den Ausnahmen echt zur Hölle werden. sowas kann man mal zum Spaß "ausleben" , aber für jemanden der sich anschickt was Ordentliches zu machen ist diese Sprache keine Option. Für kleine Sachen noch akzeptabel wird Batch schon bei Arrays etc. bitterböse. (weil Batch keine Arrays/Objecte kennt sondern Leute wie ich mit allerlei Tricks, so tun als gäbe es diese).

Wenn ich Dir einen Guten Rat geben kann lerne Powershell wenn es darum geht Kleinigkeiten "aus der Hüfte" zu schreiben, welche einfach auf jedem Windowssystem laufen. Für umfangreichere/professionellere Sachen C#.

Powershell hat in jedem Fall den Vorteil, das es von Haus aus sehr "Intelligent" ist.

Man kann wunderbar ordentlich sein:

demo.ps1

#Powershell Arrays  beginnen immer mit dem index 0
$BaseNumber=10
$Array=@();
for ($i=1; $i -le 9; ++$i )
{
    $Array+=$BaseNumber+$i
}
Write-Host Inhalt des Arrays:
$Array
Write-Host Inhalt Array[6]: $Array[6]
pause

oder mit Piplines arbeiten:

$BaseNumber=10
[Array]$Array= 1..9|
    ForEach-Object{
        $_+$BaseNumber
    }
'Arrayinhalt:'
$Array
pause

Oder richtig schlampig sein:

$Array=1..9|%{$_+10}
'Arrayinhalt:'
$Array
pause

Allerdings macht das auch Aufgaben wie: "Multipliziere alle Zahlen von 1 bis 15 miteinander" zu Kinderspiel:

iex(1..15 -join '*')

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Bei mir kommt wenn ich es so mache 15 und nicht 12 raus, aber es funktioniert immerhin :'D

@echo off
SET a=1
SET b=10
SET /a a=a+1
SET /a b=b+1
SET /a a=a+1
SET /a b=b+1
SET ab=0
SET /a ab=a+b
SET array[%ab%]=%ab%
setlocal enableDelayedExpansion
echo !array[%ab%]!
endlocal
pause >nul

Dein Fehler war denke ich, dass du Anführungsstriche verwendet hast. Hier noch einmal ein kurzes Tutorial zum Thema Arrays und Windows-Batch.:

https://www.tutorialspoint.com/batch_script/batch_script_arrays.htm

LG

Louis9911 
Fragesteller
 13.11.2022, 16:24

Danke. Dein Code ist aber im Vergleich zu meinem stark verändert. Ist denn das Problem in meinem Code nicht die möglicherweise falsche Syntax beim Setzen und auch beim Anzeigen des Arrays? Vor allem die Prozentzeichen dürften imho falsch gesetzt sein. - Danke auch für den Link, den ich zwar schon gefunden hatte, jedoch zu viele, für mich eher verwirrenden, Infos beinhaltet für meine doch eher einfache Anforderung. Vielen Dank. Grüsse, Louis

0
Louis9911 
Fragesteller
 13.11.2022, 16:34
@Louis9911

Das Setzen und Anzeigen eines Arrays in meinem Code habe ich von diesem hier quasi abgeschrieben (diesen habe ich leider noch nicht bis ins Detail kapiert):

@echo off
for /F "tokens=1* delims=[]" %%a in ('where "c:\windows\Media:*.wav" ^| find /v /n ""') do (
 set "FileCount=%%a"
 set "FileArray.%%a=%%~b"
)
set /a "i=%random% %% %FileCount% +1"
 rem anzeigen oder ausführen
call echo "%%FileArray.%i%%%"
call "%%FileArray.%i%%%
pause

Quelle: https://www.gutefrage.net/frage/windows-batch-syntax-pfad-in-forf#comment-366237633

0
Louis9911 
Fragesteller
 13.11.2022, 17:03
@Louis9911

Ich habe Deinen Code etwas verändert. Es geht mir lediglich um das Setzen und das Auslesen eines Arrays über einen Index (Setzen und Anzeigen bspw. des 3. Elements in einem Datenfeld). Das funktioniert jetzt wunderbar mit Deinem Code. Vielen Dank. (Vielleicht komme ich noch hinter das Geheimnis der eckigen Klammern und der Auszufezeichen und auch von setlocal. :-) )

Grüsse, Louis

@echo off

SET a=1

SET b=10

SET array[%a%]=%b%

setlocal enableDelayedExpansion

echo !array[%a%]!

endlocal

pause >nul

0