[Quote]

    bighead
  • 29484
  • Longevity: 2 years
  • Posts: 302
  • REPUTATION:17

    [+] [-]
kipjatok001, не подскажите мне батник, а напишите мне пожалуйста батник или погуглите за меня батник ag
Копируются папки обычно командами copy , xcopy , robocopy
Смотрите справки по этим командам, выбирайте подходящую. Не ленитесь забить в гугл свою хотелку, скорее всего уже кто-то спрашивал и ему уже подсказывали батник.
из примеров:
xcopy /i/h/r/k/y/e "откуда\*" "куда\"
мануал по xcopy

[Quote]

    cartmenezz
  • 1384
  • 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 скажет "так не годится, я ничего не понимаю"...

[Quote]

    Ander_73
  • 15549
  • Longevity: 6 years 10 months
  • Posts: 3462
  • REPUTATION:127

    [+] [-]
cartmenezz, ну, можно применить EnableDelayedExpansion
И ты прав, надо избегать коллизий типа
for %%a in () do call set %%a%%
потому что call set - это хак, а парсер прямолинеен ab

[Quote]

    cartmenezz
  • 1384
  • Longevity: 8 years 3 months
  • Posts: 508
  • REPUTATION:13

    [+] [-]
  • Location: Калининград
Ander_73, aa
Благодарю за ответ.
Ну а в принципе нормально использовать в дочерних циклах так же заглавные буквы для переменных, как и в родительском цикле? (не уверен, что выбрал правильные прилагательные, заранее извиняюсь если они совсем неподходящие).
Или стоит заменить и сделать везде разные варианты? В одном строчные буквы, во втором заглавные, в третьем символы?
Меня в принципе устраивает то, как проименовано сейчас, просто побаиваюсь возможных "частных" случаев.

[Quote]

    Ander_73
  • 15549
  • Longevity: 6 years 10 months
  • Posts: 3462
  • REPUTATION:127

    [+] [-]
cartmenezz, да вариантов масса. Я например люблю переменные типа %_var%
"Частные случаи" - ты прям так пишешь, будто программа будет жить какой-то своей тайной жизнью и тихонько тебе гадить af

[Quote]

    cartmenezz
  • 1384
  • Longevity: 8 years 3 months
  • Posts: 508
  • REPUTATION:13

    [+] [-]
  • Location: Калининград
101862программа будет жить какой-то своей тайной жизнью и тихонько тебе гадить
как можно на 100% доверять бездушной программе))

Page 87 of 87


Display posts:    

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