Crea una lista o matrici in Windows Batch

Posso dichiarare un elenco o array in un file batch come questo:

set list = "ABCD" 

E poi ho bisogno di scriverli in un file, con gli spazi tra:

 A B CD 

Sì, puoi usare entrambi i modi. Se vuoi solo separare gli elementi e mostrarli in linee separate, una lista è più semplice:

 set list=ABCD 

Un elenco di valori separati da spazio può essere facilmente elaborato da comando:

 (for %%a in (%list%) do ( echo %%a echo/ )) > theFile.txt 

Puoi anche creare un array in questo modo:

 setlocal EnableDelayedExpansion set n=0 for %%a in (ABCD) do ( set vector[!n!]=%%a set /A n+=1 ) 

e mostra gli elementi dell’array in questo modo:

 (for /L %%i in (0,1,3) do ( echo !vector[%%i]! echo/ )) > theFile.txt 

Per ulteriori dettagli sulla gestione dell’array nei file batch, consultare: Array, elenchi collegati e altre strutture dati nello script cmd.exe (batch)

ATTENZIONE! È necessario sapere che tutti i caratteri inclusi nel comando set sono inseriti nel nome della variabile (a sinistra del segno di uguale) o nel valore della variabile. Ad esempio, questo comando:

 set list = "ABCD" 

creare una variabile chiamata list (lista-spazio) con il valore "ABCD" (spazio, quota, A, ecc.). Per questo motivo, è una buona idea non inserire mai spazi nei comandi set . Se è necessario racchiudere il valore tra virgolette, è necessario includere sia il nome della variabile che il relativo valore:

 set "list=ABCD" 

PS: NON si dovrebbe usare ECHO. per lasciare le righe vuote! Un’alternativa è ECHO/ . Per ulteriori dettagli su questo punto, consultare: http://www.dostips.com/forum/viewtopic.php?f=3&t=774

 @echo off setlocal set "list=abcd" ( for %%i in (%list%) do ( echo(%%i echo( ) )>file.txt 

Non è necessario – in realtà, non è ansible “dichiarare” le variabili in batch. Assegnare un valore a una variabile lo crea e l’assegnazione di una stringa vuota la cancella. Qualsiasi nome di variabile che non ha un valore assegnato HA un valore di una stringa vuota. TUTTE le variabili sono stringhe – SENZA eccezione. Ci sono operazioni che sembrano eseguire (integer) funzioni matematiche, ma operano convertendo avanti e indietro dalle stringhe.

Batch è sensibile agli spazi nei nomi delle variabili, quindi il tuo compito come pubblicato assegnerebbe la stringa "ABCD" – comprese le virgolette, alla variabile "list " – NON includendo le virgolette, ma includendo lo spazio. Il set "var=string" syntax set "var=string" viene usato per assegnare il valore string a var mentre set var=string farà la stessa cosa. Quasi. Nel primo caso, eventuali spazi finali randagi dopo la quotazione di chiusura sono ESCLUSE dal valore assegnato, nel secondo sono INCLUSI. Gli spazi sono un po ‘difficili da vedere quando vengono stampati.

ECHO eco alle stringhe. Clasicamente, è seguito da uno spazio – uno dei separatori predefiniti usati dal batch (gli altri sono TAB, COMMA, SEMICOLON – ognuno di questi fa altrettanto bene MA i TAB spesso vengono trasformati in uno spazio-squence dagli editor di testo e altri hanno sviluppato stranezze nel corso degli anni). Altri personaggi che seguono la O in ECHO sono stati trovati a fare esattamente ciò che lo SPACE documentato dovrebbe fare. DOT è comune. Parentesi aperta ( è probabilmente la più utile dal comando

 ECHO.%emptyvalue% 

produrrà una relazione sullo stato di ECHO is on/off ( ECHO is on/off ) mentre

 ECHO(%emptyvalue% 

produrrà una linea vuota.

Il problema con ECHO( è che il risultato “sembra” sbilanciato.

A volte l’elemento dell’array può essere molto lungo, in quel momento puoi creare un array in questo modo:

 set list=a set list=%list%;b set list=%list%;c set list=%list%;d 

Quindi mostralo:

 @echo off for %%a in (%list%) do ( echo %%a echo/ ) 

Non esiste un tipo ‘array’ nei file batch, che è sia un rialzo che uno svantaggio a volte, ma ci sono soluzioni alternative. Ecco un link che offre alcuni suggerimenti per creare un sistema per te simile a un array in un batch: http://hypftier.de/en/batch-tricks-arrays . Per quanto riguarda l’eco di un file, “echo variable >> filepath” funziona per richiamare il contenuto di una variabile in un file e “echo”. (il periodo non è un errore di battitura) funziona o fa eco a un carattere di nuova riga. Penso che questi due insieme dovrebbero lavorare per realizzare ciò di cui hai bisogno.

 @echo off set array= setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION set nl=^&echo( set array=auto blue ^!nl!^ bycicle green ^!nl!^ buggy red echo convert the String in indexed arrays set /a index=0 for /F "tokens=1,2,3*" %%a in ( 'echo(!array!' ) do ( echo(vehicle[!index!]=%%a color[!index!]=%%b set vehicle[!index!]=%%a set color[!index!]=%%b set /a index=!index!+1 ) echo use the arrays echo(%vehicle[1]% %color[1]% echo oder set index=1 echo(!vehicle[%index%]! !color[%index%]!