2017-01-13 5 views
-1

Сейчас я работаю над сценарием, который печатает все числа от 000 до 999. я пытался что-то вроде этого:Тройная вложенная петля?

@echo off 
set "nums=1,2,3,4,5,6,7,8,9,0" 
for %%a in (%nums%) do (
for %%b in (%nums%) do (
for %%c in (%nums%) do echo %%a%%b%%c 
) 
) 
pause 

Но выходные номера incomlete и в странном порядке. После нескольких часов reflextion, я сделал этот сценарий:

@echo off 
echo list of nums: > nums.txt 
set fstnum=0 
set secnum=0 
set trdnum=0 
goto astrt 
:strt: 
set /a "fstnum=%fstnum% + 1" 
:astrt: 
echo %trdnum%%secnum%%fstnum% >> nums.txt 
if /i %trdnum%==9 (if %secnum%==9 if %fstnum%==9 exit) else (goto next) 
:next: 
if /i %secnum%==9 (goto ak) else (goto nnxxtt) 
:nnxxtt: 
if /i %fstnum%==9 (goto nd) else (goto strt) 
:nd: 
set fstnum=0 
set /a "secnum=%secnum% + 1" 
goto astrt 
:ak: 
if /i %fstnum%==9 (goto nkst) else (goto strt) 
:nkst: 
set secnum=0 
set fstnum=0 
set /a "trdnum=%trdnum% + 1" 
goto astrt 

Теперь все отлично работает, но мне интересно, почему тройная вложенная for петля не работает. Есть идеи?

+0

Этикетки должны быть указаны как ': Label' вместо': Label: '... – aschipfl

ответ

1

Eсть другой способ:

@echo off 
setlocal EnableDelayedExpansion 

for /l %%n in (0,1,999) do (
    set "num=00%%n" 
    echo !num:~-3! 
) 
pause>nul 

Вы можете настроить номера по своему желанию.

Этот цикл идет от 0 до 999 с шагом 1, добавляет два нуля перед цифрами и печатает 3 правых цифры.

Результат будет от 000 до 999, как вы описали.

1

Ваша петля выполняет точно так же, как указано. Но результат может быть не таким, как вы ожидали, из-за неправильной инициализации.

Если вы просто изменить %nums% декларацию

set "nums=0,1,2,3,4,5,6,7,8,9" 

вы получите результирующие строки в обычном порядке кардинального: 000, 001, 002, ... 998, 999.

+0

правильно, но иногда я получаю номера вроде: 95 Ⓒ0, 96 Ⓒ0 .... любые идеи? (и он начинается с 7 Ⓒ01, я не вижу числа меньше 701) –

+2

@ HackR_360 - Я беру ваш точный код из вашего вопроса, делаю изменение, которое предлагает PA, а затем запускаем, и я получаю правильный вывод. Таким образом, вы делаете что-то еще не так, что вы не показываете или не говорите нам об этом. – dbenham

Смежные вопросы