windows - sæt multidimensionelle array batch

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg opretter multidimensionale arrays på denne måde:


set Name[0]="name1"
set Id[0]=1234
set Action[0]=false

set Name[1]="name2"
set Id[1]=5678
set Action[1]=true


Så loop:


set "x=0"

:SymLoop
if defined Id[\%x\%] (
if defined Action[\%x\%] (
if defined Name[\%x\%] (

call set "name=\%\%Name[\%x\%]\%\%"
call set "id=\%\%Id[\%x\%]\%\%"
call set "action=\%\%Action[\%x\%]\%\%"

:: use name, id, action

)
set /a "x+=1"
GOTO :SymLoop
)
)
)


Er der en anden tilgang til at oprette flerdimensionale arrayer uden at indstille hver nøgle manuelt? Når jeg definerer array og ændre rækkefølge (nøgle nummer), så skal jeg re-arange hele array for at have rigtige 'key values'.


Er der noget lignende


set myArray ["name1", 1234, false]
set myArray ["name2", 5678, true]


og derefter iterere i loop og definere
- 'name1' som 'navn' variabel
- 1234 angivet som 'id' variabel
- 'falsk' som 'handling' variabel


i loop? Reducerer brugen af ​​'\_x' variabel definition


Bemærk: Jeg er nybegynder på Windows-batch

Bedste reference


@echo off
setlocal enabledelayedexpansion
REM build a 2d-array:
for \%\%i in (Name,Id,Action) do (
  for /l \%\%j in (0,1,5) do (
    set array[\%\%i,\%\%j]=!random!
  )
)
set array
REM show a certain element:
echo third Name = \%array[Name,3]\%


eller for at holde tæt på dit eksempel:


set array[Name,0]="John"
set array[Id,0]=1234
set array[Action,0]=false

set array[Name,1]="Jane"
set array[Id,1]=9876
set array[Action,1]=true

set array
echo second Name = \%array[Name,1]\%

Andre referencer 1


Så blot tilføj dit array i en fil:


Name1,1234,false
Name2,4567,true


så din batch:


for /f "tokens=1-3 delims=," \%\%i in (newfile.txt) do (
 echo name=\%\%i
 echo id=\%\%j
 echo action=\%\%k
)

Andre referencer 2


For med/f kan du analysere din 'json' array (behandler fortløbende afgrænsere som en og tom felter som ikke-eksisterende, plads i delims er vigtigt)


@echo off
set myArray=["name1", 1234, false]

for /f "tokens=1-3 delims=,[] " \%\%i in ("\%myArray\%") DO (
  echo name=\%\%i
  echo id=id=\%\%j
  echo action=\%\%k
)