Crear lista o matrices en Windows Batch

¿Puedo declarar una lista o matriz en un archivo por lotes como este?

set list = "ABCD" 

Y luego tengo que escribir esto en un archivo, con los espacios entre:

 A B CD 

Sí, puedes usar ambas formas. Si solo desea separar los elementos y mostrarlos en líneas separadas, una lista es más simple:

 set list=ABCD 

Una lista de valores separados por espacio puede ser procesada fácilmente por el comando:

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

También puedes crear una matriz de esta manera:

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

y mostrar los elementos de la matriz de esta manera:

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

Para obtener más detalles sobre la administración de arreglos en archivos por lotes, consulte: Arrays, listas enlazadas y otras estructuras de datos en la secuencia de comandos cmd.exe (por lotes)

¡ATENCIÓN! Debe saber que todos los caracteres incluidos en el comando set se insertan en el nombre de la variable (a la izquierda del signo igual) o en el valor de la variable. Por ejemplo, este comando:

 set list = "ABCD" 

crea una variable llamada list (list-space) con el valor "ABCD" (espacio, comillas, A, etc.). Por esta razón, es una buena idea nunca insertar espacios en los comandos de set . Si necesita incluir el valor entre comillas, debe incluir tanto el nombre de la variable como su valor:

 set "list=ABCD" 

PD: NO debes usar ECHO. para dejar líneas en blanco! Una alternativa es ECHO/ . Para obtener más detalles sobre este punto, consulte: 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 

No necesita, en realidad, no puede “declarar” variables en lote. Al asignar un valor a una variable, se crea y la asignación de una cadena vacía lo elimina. Cualquier nombre de variable que no tenga un valor asignado TIENE un valor de cadena vacía. TODAS las variables son cadenas, SIN excepción. Hay operaciones que parecen realizar funciones matemáticas (enteras), pero operan mediante la conversión de las cadenas hacia adelante y hacia atrás.

El lote es sensible a los espacios en los nombres de las variables, por lo que su asignación tal como se publicó asignaría la cadena "ABCD" , incluidas las comillas, a la variable "list " , sin incluir las comillas, pero incluyendo el espacio. El set "var=string" syntax set "var=string" se usa para asignar el valor string a var mientras que set var=string hará lo mismo. Casi. En el primer caso, cualquier espacio posterior extraviado después de la cotización de cierre está EXCLUIDA del valor asignado, en el segundo, están INCLUIDOS. Los espacios son un poco difíciles de ver cuando se imprimen.

ECHO hace eco de cadenas. Clásicamente, va seguido de un espacio, uno de los separadores predeterminados utilizados por lotes (los otros son TAB, COMMA, SEMICOLON) cualquiera de estos funciona igual de bien, PERO TABS a menudo se transforman en un espacio-secuencia por los editores de texto y el otros han desarrollado peculiaridades propias a lo largo de los años). Se ha descubierto que otros personajes que siguen a la O en ECHO hacen precisamente lo que debe hacer el ESPACIO documentado. DOT es común. Paréntesis abierto ( es probablemente el más útil desde el comando

 ECHO.%emptyvalue% 

producirá un informe del estado ECHO is on/off ( ECHO is on/off ) mientras que

 ECHO(%emptyvalue% 

producirá una línea vacía.

El problema con ECHO( es que el resultado “parece” desequilibrado.

A veces, el elemento de matriz puede ser muy largo, en ese momento puede crear una matriz de esta manera:

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

Entonces muéstralo:

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

No hay un tipo de “matriz” en los archivos de proceso por lotes, que es a la vez positivo y negativo, pero hay soluciones provisionales. Aquí hay un enlace que ofrece algunas sugerencias para crear un sistema para usted similar a una matriz en un lote: http://hypftier.de/es/batch-tricks-arrays . En cuanto a hacer eco en un archivo “echo variable >> filepath” funciona para hacer eco de los contenidos de una variable en un archivo, y “echo”. (el período no es un error tipográfico) funciona o hace eco de un carácter de nueva línea. Creo que estos dos juntos deberían trabajar para lograr lo que necesitas.

 @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%]!