cartmenezz
  - Longevity: 8 years 3 months
- Posts: 508
- REPUTATION:13[+] [-]
- Location: Калининград
|
Приветствую! Появилась задачка, вроде как сам решил, но захотелось немного посоветоваться. - Есть скрипт, в главном меню номера пунктов. - Вводим номера (через пробел или запятую) пунктов которые нужно выполнить. - Через "set /p" строка с номерами попадает в переменную %var%, далее она разбирается в цикле, и происходит поочередный вызов меток с введенными номерами. Захотелось реализовать возможность вводить группы пунктов через дефис, что-то типа такого: "10 12 20-27 35 40-48" Получилось так:@echo off set "var=1 2 3 4 5 6 7 8 9 10 11-18 19 20" for %%A in (%var%) do ( for /f "tokens=1,2 delims=-" %%a in ("%%A") do ( if "%%b" EQU "" echo %%a if "%%b" NEQ "" for /L %%i in (%%a,1,%%b) do echo %%i ) ) pause *строка задана сразу, для теста работает. Правда напрягает, что цикл в цикле в цикле... Но все осложняется тем, что с некоторых пор у меня добавлен предварительный анализ строки (переменной %var%) и выявление спорных номеров. И в случае наличия таковых, они попадают в переменную %attn%. И перед выполнением выводятся предупреждения для каждого из спорных пунктов. Так что пришлось дорабатывать. Пришел к такому варианту:@echo off set "var=1 2 3 199-204 223-226 4 5 6" set "attn=" for %%A in (%var%) do ( for /f "tokens=1,2 delims=-" %%G in ("%%A") do ( if "%%~H" EQU "" ( if "%%~G"=="200" call set "attn=%%attn%% 200" if "%%~G"=="204" call set "attn=%%attn%% 204" if "%%~G"=="220" call set "attn=%%attn%% 220" if "%%~G"=="225" call set "attn=%%attn%% 225" ) if "%%~H" NEQ "" for /L %%M in (%%G,1,%%H) do ( if "%%~M"=="200" call set "attn=%%attn%% 200" if "%%~M"=="204" call set "attn=%%attn%% 204" if "%%~M"=="220" call set "attn=%%attn%% 220" if "%%~M"=="225" call set "attn=%%attn%% 225" ) ) ) echo. echo YOUR CHOICE: [%var%] echo ATTN: [%attn%] echo. for %%A in (%var%) do ( for /f "tokens=1,2 delims=-" %%G in ("%%A") do ( if "%%~H" EQU "" echo %%G if "%%~H" NEQ "" for /L %%M in (%%G,1,%%H) do echo %%M ) ) echo. pause echo. exit * пришлось разбирать строку %var% дважды - сначала чтобы составить строку с проблемными пунктами (для вывода предупреждений, потом уже для выполнения пунктов. * по факту у меня конечно будет в конце не вывод на экран этих номеров, а вывод предупреждений, который прописан отдельно... и в случае согласия пользователя - выполнение пунктов.. тут упрощено для теста Тут столкнулся с проблемой, что пришлось менять букву во втором цикле, так как %%attn%% по всей видимости воспринималась как переменная цикла %%a. Пара вопросов: - Как вообще грамотные люди оформляют цикл в цикле? Я раньше просто брал в одном заглавные а в другом строчные... Но тут их три... Вроде как символы тоже годятся, пробовал с знаками $ и # - работает... Но хочется и чтобы наглядно было. - Вариант как сделал я (взял только заглавные, но удаленные друг от друга буквы для всех переменных циклов) он нормальный? Не будет проблем? Ато может на Вин10 все ОК, а например на Вин7 cmd скажет "так не годится, я ничего не понимаю"...
|
 Отправлено: 03-Dec-2023 21:30
(after 2 hours 7 minutes)
cartmenezz
  - Longevity: 8 years 3 months
- Posts: 508
- REPUTATION:13[+] [-]
- Location: Калининград
|
Ander_73,  Благодарю за ответ. Ну а в принципе нормально использовать в дочерних циклах так же заглавные буквы для переменных, как и в родительском цикле? (не уверен, что выбрал правильные прилагательные, заранее извиняюсь если они совсем неподходящие). Или стоит заменить и сделать везде разные варианты? В одном строчные буквы, во втором заглавные, в третьем символы? Меня в принципе устраивает то, как проименовано сейчас, просто побаиваюсь возможных "частных" случаев.
|
Ander_73
  - Longevity: 6 years 10 months
- Posts: 3462
- REPUTATION:127[+] [-]
|
cartmenezz, да вариантов масса. Я например люблю переменные типа %_var% "Частные случаи" - ты прям так пишешь, будто программа будет жить какой-то своей тайной жизнью и тихонько тебе гадить
|
cartmenezz
  - Longevity: 8 years 3 months
- Posts: 508
- REPUTATION:13[+] [-]
- Location: Калининград
|
101862программа будет жить какой-то своей тайной жизнью и тихонько тебе гадить как можно на 100% доверять бездушной программе))
|
Page 87 of 87
Current time is: 08-Dec 22:56
All times are UTC + 3
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|