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

1

Não tenho certeza porque executar este comando a partir do prompt não funciona, pode setlocal só ser chamado de um arquivo de lote?

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

O resultado esperado é:

Hello 1
Hello 2
Hello 3

ATUALIZAÇÃO: Estou usando o Windows 8.1

    
por sparks 04.03.2014 / 07:39

2 respostas

0

A questão é a resposta. Você está claramente usando o interpretador de comandos cmd da Microsoft no Windows NT; e nesse interpretador de comandos setlocal de fato não tem efeito quando invocado com um script de comando.

Outros interpretadores de comandos diferem, em que setlocal , se pode ser invocado com um script de comando, se é ninho e se controla as coisas que você está tentando controlar.

O setlocal original, no cmd da Microsoft no OS / 2 versão 1, acabou de salvar a unidade, o diretório e o ambiente atuais; não teve efeito fora dos scripts de comando; e não aninhou. Como você pode ver, no ú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 realiza uma expansão variável progressivamente em comandos compostos, e não precisa do truque de expansão de variável atrasada para fazer o que você está tentando fazer. Isso:

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

Leitura adicional

  • SETLOCAL . Referência de linha de comando do Windows XP A – Z. TechNet. Corporação Microsoft.
  • SETLOCAL . Tome a ajuda do comando / TCC. Software JP.
  • Jonathan de Boyne Pollard. SETLOCAL . Referência de Comando do Interpretador de Comando de 32 Bits.
  • %código%. Referência do comando OS / 2 Warp. IBM Corporation.
  • J. Emmett Beam (1988). OS / 2 ilustrado . Publicação de Wordware. ISBN 9781556220531. p. 40
por 04.03.2014 / 19:59
0

A resposta acabou sendo bem simples!

para / l% i em (1,1,3) do (texto do conjunto de chamadas =% i & echo Olá% text%)

    
por 06.03.2014 / 06:16