Batch: Array?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das gute bei Batch ist, dass auch Variabelnamen variabel sein können (Dies setzt DelayedExpansion = verzögerte Variablenauslese mit !var! voraus, was ich hier nicht näher erläutern möchte.)

Hier mal ein Codebeispiel zum erstellen und füllen (mit zufälligen Nummern) eines Arrays:

@echo off & setlocal enableDelayedExpansion

set "arr.length=10"

for /L %%i in (1,1,%arr.length%) do (
      set arr[%%i]=!random!
      echo arr[%%i] = !arr[%%i]!
)

pause >nul

Ein anderer praktischer Aspekt ist, dass dadurch, dass kein richtiges Array erstellt wird, dieses auch jederzeit "erweitert" werden kann. Einfach die Variable mit der nächstgrößeren Nummer definieren und nicht set /a arr.length += 1 vergessen.

PS: normalerweise fängt man bei Arrays mit arr[0] an, da aber die For-Schleife nur <= und nicht < kennt und man nicht einfach 1 abziehen kann ohne eine extra Variable zu verwenden, hab ich einfach mal mit 1 angefangen.

~Tim

Tim  hat  ist  mir   schon  zuvorgekommen...ich sollte  vielleicht  nicht so  lange schlafen...

Es  müssen auch  nicht zwingend eckige Klammern sein um den Index zu qualifizieren... es kann auch nichts oder ein punkt oder unterstrich sein nur  vom Minus sollte man  die Finger  lassen (zwar möglich  aber  bei "set /a..." können die seltsamsten Dinge  passieren o.O.

was  man sonst noch  mit Arrays anstellen  kann...
in eine Datei speichern , löschen, wieder einlesen aus der  Datei
nach einem Begriff durchsuchen...
Inhalte in en   neues Array  kopieren
...und ein  paar andere  feine  Sachen...
eine kleine  Demo:

https://pastebin.com/Z9i7Ppzv

..ja  wieder  auf Pastebin,  sorry ...ich stehe auf  Kriegsfuß  mit  den GF-Editor...

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Erzesel  05.07.2017, 12:41

PS: Manchmal  braucht die Batch  ein Weilchen , schließlich opperiert sie mit einigen  Tausend  ArrayElementen

also wenn der  Cursor  mal einige Sekunden nutzlos  blinkt, so macht  die  Batch  trotzdem etwas...
Batch ist  eben  nicht  C++  aber dafür  kann  man  mit einer Zeile Code  ein ganzes 3000 ArrayElemente  in eine  Datei  verfrachten und  mit einer anderen den  ganzen  Grusch  wieder einlesen...

Das schafft  kein C...:)

1
timlg07  05.07.2017, 14:53
@Erzesel

Ja für manche Sachen finde ich ist Batch wirklich simpel und praktisch, da sind viele Dinge ganz easy was mit C++/Java/etc n Haufen Arbeit ist.

Und ich hab nicht mal bedacht, dass man um ein Array vollkommen auszugeben nicht mal ne for Schleife braucht

0
timlg07  05.07.2017, 14:51

Der GF-Editor ist Mist, da haste vollkommen Recht...aber dann gleich auf pastebin nen ganzen Batch-Roman reinkopieren. ;D

0