Obter argumento em lote com uma variável contendo um número

1

Eu tenho um loop que enumera todos os argumentos.

A partir desse loop, quero repetir o pensamento até o argumento atual.

@ECHO OFF
setlocal enabledelayedexpansion

SET /a Counter=0
FOR %%a IN (%*) DO (
    SET /a Counter=!Counter!+1
    FOR /L %%A IN (1, 1, !Counter!) DO (
        ECHO %%%%A
    )
)

Eu tentei %%! A! e várias combinações de% e! Eu também tentei primeiro adicionar uma variável a um loop interno e tentei usar isso.

O mais próximo que eu obtenho é obter valores literais, por exemplo,% 1% 2% 3

A execução de amostra para argumentos TEST1 TEST2 TEST3 deve ser

TEST1 (from outer loop)

    TEST1 (from inner loop)

TEST2 (from outer loop)

    TEST1 (from inner loop)

    TEST2 (from inner loop)

TEST3 (from outer loop)

    TEST1 (from inner loop)

    TEST2 (from inner loop)

    TEST3 (from inner loop)

Eu vejo várias abordagens ao usar um único loop, mas não com loops aninhados

    
por Shaun Vermaak 02.09.2015 / 13:38

2 respostas

1

A execução de amostra para argumentos TEST1 TEST2 TEST3 deve ser

TEST1 (from outer loop)
    TEST1 (from inner loop) 
TEST2 (from outer loop)
    TEST1 (from inner loop)
    TEST2 (from inner loop) 
TEST3 (from outer loop)
    TEST1 (from inner loop)
    TEST2 (from inner loop)
    TEST3 (from inner loop)

Use o seguinte arquivo de lote (test.cmd):

@echo off
setlocal
setlocal EnableDelayedExpansion
set /a _count=0
for %%a in (%*) do (
  echo %%a ^(from outer loop^)
  set /a _count=!_count!+1
  set /a _stop=0
  call :InnerLoop %*
  )
goto :eof

:InnerLoop
  for %%b IN (%*) do (
    set /a _stop=!_stop!+1
    echo     %%b ^(from inner loop^)
    if [!_stop!]==[!_count!] goto :next
    )

:next
goto :eof
endlocal

Exemplo de saída:

F:\test>test TEST1 TEST2 TEST3
TEST1 (from outer loop)
    TEST1 (from inner loop)
TEST2 (from outer loop)
    TEST1 (from inner loop)
    TEST2 (from inner loop)
TEST3 (from outer loop)
    TEST1 (from inner loop)
    TEST2 (from inner loop)
    TEST3 (from inner loop)

Leitura Adicional

por 02.09.2015 / 14:18
1

Desde que eu já comecei a jogar, outra opção. Eu simplifiquei a formatação, você pode ajustar isso. Em vez de tentar usar% 1,2,3 ... diretamente, copia-os para X1,2,3 ...

@echo off
setlocal
setlocal enabledelayedexpansion
set N=0
for %%a in (%*) do ( echo %%a outer 
  set /A N=N+1 & set X!N!=%%a
  for /L %%I in (1,1,!N!) do echo   !X%%I! inner
)
endlocal

run with args: alpha bravo charlie 
alpha outer
  alpha inner
bravo outer
  alpha inner
  bravo inner
charlie outer
  alpha inner
  bravo inner
  charlie inner
    
por 02.09.2015 / 14:47

Tags