Intentando establecer una variable local dentro de un bucle for en una línea

Intentando establecer una variable local dentro de un bucle for en una línea

No estoy seguro de por qué ejecutar este comando desde el indicador no funciona. ¿Solo se puede llamar a setlocal desde un archivo por lotes?

setlocal EnableDelayedExpansion & for /l %i in (1,1,3) do (set text=%i & echo Hello !text!)

El resultado esperado es:

Hola 1
Hola 2
Hola 3

ACTUALIZAR: Estoy usando Windows 8.1

Respuesta1

La pregunta es la respuesta. Claramente estás usando cmdel intérprete de comandos de Microsoft en Windows NT; y en ese caso, el intérprete de comandos setlocalno tiene ningún efecto cuando se invoca sin un script de comando.

Otros intérpretes de comandos difieren en lo que setlocalhace, en si se puede invocar sin un script de comando, en si se anida y en si controla las cosas que usted está tratando de controlar.

El original setlocal, en Microsoft cmden OS/2 versión 1, simplemente guarda la unidad, el directorio y el entorno actuales; no tuvo ningún efecto sin los scripts de comando; y no anidó. Como se puede ver, durante el último cuarto de siglo el mando se ha extendido en diferentes direcciones.

Una razón para la diferencia aquí es que el TCC de JP Software realiza una expansión variable progresivamente en comandos compuestos y no necesita el truco de expansión variable retrasada para hacer lo que usted está tratando de hacer. Este:

para /l %i en (1,1,3) hacer (establecer texto=%i y eco Hola %text%)
… imprime lo que desea imprimir.

Otras lecturas

  • SETLOCAL.Referencia de la línea de comandos de Windows XP A–Z. TechNet. Corporación Microsoft.
  • SETLOCAL. Tomar comando / ayuda TCC. Software JP.
  • Jonathan de Boyne Pollard. SETLOCAL. Referencia de comandos del intérprete de comandos de 32 bits.
  • SETLOCAL. Referencia del comando Warp de OS/2. Corporación IBM.
  • Haz J. Emmett (1988).OS/2 ilustrado. Publicación de textos. ISBN 9781556220531. pág. 40

Respuesta2

¡La respuesta resultó ser bastante simple!

para /l %i en (1,1,3) hacer (llamar a set text=%i & echo Hola %text%)

información relacionada