1

У меня есть цикл, который перечисляет все аргументы.

Из этого цикла я хочу все продумать до текущего аргумента.

@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
    )
)

Я пытался %%!A! и различные комбинации% и! Я также попытался сначала добавить переменную во внутренний цикл и попытался использовать это.

Самое близкое, что я получаю - это получить буквальные значения, например,% 1% 2% 3

Пример выполнения для аргументов 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)

Я вижу несколько подходов при использовании одного цикла, но не любого с вложенными циклами

2 ответа2

1

Пример выполнения для аргументов 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)

Используйте следующий пакетный файл (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

Пример вывода:

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)

Дальнейшее чтение

1

Так как я уже начал играть, другой вариант. Я упростил форматирование, вы можете настроить это. Вместо того, чтобы пытаться использовать% 1,2,3 ... напрямую, копирует их в 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .