Tentando definir uma variável local dentro de um loop for em uma linha

Tentando definir uma variável local dentro de um loop for em uma linha

Não sei por que executar este comando no prompt não funciona. O setlocal só pode ser chamado a partir de um arquivo em lote?

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

O resultado esperado é:

Olá 1
Olá 2
Olá 3

ATUALIZAR: Estou usando o Windows 8.1

Responder1

A pergunta é a resposta. Você está claramente usando o interpretador de comandos da Microsoft cmdno Windows NT; e nesse interpretador de comandos setlocalrealmente não tem efeito quando invocado fora de um script de comando.

Outros interpretadores de comandos diferem no que setlocalfazem, se podem ser invocados fora de um script de comando, se aninham e se controlam as coisas que você está tentando controlar.

O original setlocal, no OS/2 versão 1 da Microsoft cmd, apenas salvou a unidade, diretório e ambiente atuais; não teve efeito fora dos scripts de comando; e não aninhou. Como você pode ver, ao longo do último quarto de século o comando foi estendido em diferentes direções.

Uma razão para a diferença aqui é que o TCC da JP Software executa a expansão variável progressivamente em comandos compostos e não precisa do truque de expansão variável atrasada para fazer o que você está tentando fazer. Esse:

for /l %i in (1,1,3) do (set text=%i & echo Olá %text%)
… imprime o que você deseja imprimir.

Leitura adicional

  • SETLOCAL.Referência de linha de comando do Windows XP de A a Z. TechNet. Corporação Microsoft.
  • SETLOCAL. Obtenha ajuda do Comando / TCC. Software JP.
  • Jonathan de Boyne Pollard. SETLOCAL. Referência de comando do interpretador de comandos de 32 bits.
  • SETLOCAL. Referência do comando OS/2 Warp. Corporação IBM.
  • J. Emmett Beam (1988).OS/2 ilustrado. Publicação Wordware. ISBN 9781556220531. pág. 40

Responder2

A resposta acabou sendo bastante simples!

for /l %i in (1,1,3) do (call set text=%i & echo Olá %text%)

informação relacionada