Как ни крути, а cmd.exe и command.com - это останки MS DOS, поэтому я так и озаглавил эту запись.
Итак, server 2008, cmd.exe, батник, цикл... Что я хочу сделать? Я хочу вывести числа от 1 до 20, причем числа меньше 10 должны выводиться с ведущими нулями. Способов для этого много, но все они упираются в присвоение какой-то переменной текущего значения счетчика цикла.
Чтобы не мудрить с проверками, я решил использовать наиболее универсальный способ: прибавляю к числу 100 и из полученного значения беру 2 правых символа. Можно прибавлять что угодно, главное, чтобы справа было нужное число нулей, чтобы не исказить само значение.
Итак, server 2008, cmd.exe, батник, цикл... Что я хочу сделать? Я хочу вывести числа от 1 до 20, причем числа меньше 10 должны выводиться с ведущими нулями. Способов для этого много, но все они упираются в присвоение какой-то переменной текущего значения счетчика цикла.
Чтобы не мудрить с проверками, я решил использовать наиболее универсальный способ: прибавляю к числу 100 и из полученного значения беру 2 правых символа. Можно прибавлять что угодно, главное, чтобы справа было нужное число нулей, чтобы не исказить само значение.
for /L %%a in (1,1,20) do (
set /A b=100+%%a
set b=%b:~-2%
echo a=[%%a] b=[%b%]
)
По идее у меня должно напечататься 20 строк вида:
a=[x] b=[zy]
где x - значение переменной счетчика цикла, y=x, а z - ведущий ноль, если он есть.
Однако, вместо этого печатаются строчки вида:
a=[x] b=[]
Я перепробовал все варианты, какие только смог придумать. Увы, все команды работают с %%a нормально, кроме команды присвоения. Вариант с
setlocal EnableDelayedExpansion
тоже не помог. Пришлось выкручиваться. Частично решение, саму идею, нашел здесь.for /L %%a in (1,1,20) do (
call :MySub %%a
echo a=[%%a] b=[%b%]
)
exit /b 0
:MySub
set /A b=100+%~1
set b=%b:~-2%
exit /b 0
После этого всё заработало.
Вывод: если надо что-то сделать со значением счетчика цикла, сложнее чем вывести его значение на экран, то для этого лучше передать его как параметр в подпрограмму.
Комментариев нет:
Отправить комментарий
Пожалуйста, воздержитесь от грубостей и персональных нападок.
Я не против матерщины, но она должна быть уместной и использоваться для выражения эмоций, а не в качестве основного средства выражения мыслей.