Оболочки Windows вложенных циклов for


Я хотел запустить программу несколько раз с двумя увеличивающимися входными параметрами. Для этого мне пришлось написать небольшой шелл-скрипт, содержащий два вложенных цикла for. По какой-то причине, которую я не понял, скрипт останавливает свое выполнение перед печатью всех значений.

for /l %%r in (1 2 3 4 5 6 7 8 9 10) do (
    for /l %%c in (1 2 3 4 5 6 7 8 9 10) do (
        rem Run my program here!
        echo %%r %%c 
    )
)

Выход равен

1 1
1 3
3 1
3 3

Я действительно теряюсь, так как я не эксперт в программировании оболочки windows.

1 2

1 ответ:

Вы добавили флаг /l, который имеет следующие свойства:

for /l %%X in (start, step, end) do command

Итак, в вашем случае:

Start: 1
Step : 2
End  : 3

Так вот почему вы получаете:

(1, 1), (1,3), (3,1), (3,3)

Если вы удалите /l, вы должны получить ожидаемые результаты.

echo off
for  %%r in (1 2 3 4 5 6 7 8 9 10) do (
    for  %%c in (1 2 3 4 5 6 7 8 9 10) do (
        echo %%r %%c 
    )
)

Который возвращает (1,1) к (10,10).

Вы можете найти дополнительную информацию здесь