![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как организовать вызов bat с большим количеством переменных и их обработку? |
|
|
CMD/BAT - [решено] Как организовать вызов bat с большим количеством переменных и их обработку?
|
Старожил Сообщения: 182 |
Как организовать вызов bat с большим количеством переменных и их обработку?
Есть батник, который устанавливает несколько программ (больше 10). Установка каждой программы идет отдельным участком кода. Хочется, чтобы его можно было вызывать с параметрами в виде списка программ, которые нужно установить (в списке переменных может быть количество устанавливаемых программ, если это облегчит дело). Что-то вроде этого: ::разбор переменных if (среди переменных есть программа1) (устанвливать1=true) if (среди переменных есть программа2) (устанвливать2=true) ... ::установка if (устанвливать1=true) (код установки первой программы) ... Читал про команду shift, но то, что у меня придумывается, получается очень громоздким, да еще и для каждой программы разбор дублируется... После написания предыдущего предложения, возникла мысль, которая оказалась рабочей: :startinstall shift if "%0"=="" (goto finishinstall) else (goto %0) :program1 ::устанавливаем программу program1 goto startinstall :program2 ::устанавливаем программу program2 goto startinstall :: И так далее для остальных программ :finishinstall · Хочется, чтобы при вызове без параметров устанавливались все программы, а лучше даже не все, а определенный набор. · Хочется, чтобы программы устанавливались в том порядке, в котором они прописаны в батнике. · Как сделать, чтобы все работало, если один или несколько параметров не имеют метки в батнике (неверные параметры вызова) Эти требования опять приводят к схеме, которую я привел выше. Можно ли это осуществить, не перегружая батник большим количеством кода? |
|
------- Отправлено: 18:36, 03-07-2010 |
Пользователь Сообщения: 140
|
Профиль | Отправить PM | Цитировать seriych,
примерно так (но с редакцией под себя): Echo on&Chcp 866&Title S E T U P &cls if "%~1"=="" (set /p LingID= Введите LingID: ) else (set LingID=%~1) for /f "tokens=1,2* delims=$" %%a in ('^<"%~dpf0" Findstr /i "%LingID%"') do ^ if Exist "%~dp0%%a" ((start /b /wait "%~dp0%%a" %%b %%c)) else Echo Error install %%a-application >> "%~dp0Errlog" pause&goto :eof :install program-001$ /a /b /c$command1&command2&command3 program-002$ /a /b /c$command1&command2&command3&command4 program-003$ /a /b /c$command1&command2 program-004$ /a /b /c$command1&command2&command3&command4 program-005$ /a /b /c$command1 program-006$ /a /b /c$command1&command2&command3 program-007$ /a /b /c$command1&command2&command3&command4 program-008$ /a /b /c$command1&command2 program-009$ /a /b /c$command1 Инсталяторы находяться в той dir-ии, что *.bat или же меняй пути все setup'ы запускаются по очереди (или исключи /wait ) program-XXX - имя программы (например install_flash_player.exe) LingID - идентификатор инсталятора, придумай сам (это должна быть часть имени проги). /a /b /c - ключи запуска Ошибки пишутся в файл "Errlog" Запуск из CMD или WinRun, пример: |
Последний раз редактировалось deepred, 04-07-2010 в 01:01. Причина: уточнение... Отправлено: 21:08, 03-07-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 182
|
Профиль | Отправить PM | Цитировать deepred,
ээээ... Я несколько озадачен ![]() А вот это start /b /wait "%~dp0%%a" подразумевает, что у меня запускается установщик приложения? Тогда мне это не подходит, потому что для каждой программы у меня помимо запуска инсталлятора еще и различные действия совершаются (где-то ярлыки переименовать, где-то настройки скопировать). P.S. Делать отдельный батник для каждой программы не предлагать, тем более что они и так есть. Хочется как раз убрать эти батники. |
------- Отправлено: 21:23, 03-07-2010 | #3 |
Пользователь Сообщения: 140
|
Профиль | Отправить PM | Цитировать seriych,
Включаем фантазию!!!!!!!!!!!!!!!! "/a /b /c", а что тебе мешает включить сценарий в эту подстроку? допустим: setup_programm_name.exe$ /silient$copy xxx\settings.ini yyy\yyy\ & ren xxx\name1.lnk name2.lnk и получится start /b /wait xxx\setup_programm_name.exe /silient copy xxx\settings.ini yyy\yyy\ & ren xxx\name1.lnk name2.lnk |
Последний раз редактировалось deepred, 04-07-2010 в 01:04. Отправлено: 21:35, 03-07-2010 | #4 |
Старожил Сообщения: 182
|
Профиль | Отправить PM | Цитировать deepred,
Вот фантазии-то и не хватает, видимо ![]() Для каждой программы этот дополнительный код сильно различается. Или я чего-то не понимаю в твоем коде... |
|
------- Отправлено: 21:49, 03-07-2010 | #5 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Так подойдет?
@echo off Set list=%* :: Список вариантов, которые могут быть обработаны в скрипте Set Exilist=1 2 3 4 7 9 11 12 15 18 21 25 :: Список вариантов, которые будут обработаны в скрипте при его запуске без параметров If "%list%"=="" Set list=1 2 4 7 9 11 21 For %%a In (%list%) Do For %%i In (%Exilist%) Do If %%a==%%i Call :M%%a Exit :M1 :: Здесь команды для варианта 1 ... GoTo :EOF :M2 :: Здесь команды для варианта 2 ... GoTo :EOF :M3 ... GoTo :EOF :M4 ... GoTo :EOF :M7 ... GoTo :EOF ... |
Отправлено: 22:43, 03-07-2010 | #6 |
Старожил Сообщения: 182
|
Профиль | Отправить PM | Цитировать Ладно, спасибо. С утра может мозг лучше будет соображать.
|
------- Отправлено: 01:18, 04-07-2010 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать до кучи
@echo off for %%i in (%*) do set $:M_%%i=:M_%%i 1>nul 2>&1 set $:||for /f %%i in ('findstr /bi ":M_" "%0"') do set $%%i=%%i for /f "tokens=1* delims==" %%i in ('set $:') do call %%j %%j exit /b :M_01 Echo Here code for %1 module. GoTo :EOF :M_10 Echo Here code for %1 module. GoTo :EOF :M_99 Echo Here code for %1 module. GoTo :EOF |
Отправлено: 03:40, 04-07-2010 | #8 |
Старожил Сообщения: 182
|
Профиль | Отправить PM | Цитировать Всем спасибо.
Скрипт deepred я так и не понял ![]() Вариант gora самый простой для понимания. Правда ставит в порядке, в котором идут аргументы, а не в заранее определенном, но это не принципиально, да и с другой стороны так даже правильнее (более гибко получается). Вариант amel27 пока не смотрел, ибо предыдущий устроил. Плюсик за содействие. |
------- Отправлено: 20:45, 04-07-2010 | #9 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата seriych:
|
|
Отправлено: 21:02, 04-07-2010 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Как осуществить циклическую обработку параметров %1,%2... в bat-файле | leonaft | Скриптовые языки администрирования Windows | 7 | 14-04-2010 14:03 | |
[решено] Есть папка с большим количеством jpeg файлов, надо сохранить файлы как .bmp | evg64 | AutoIt | 9 | 02-10-2009 09:46 | |
Как сделать обработку $_GET и сборку html-документа екзешником, как multitran.ru? | borg92 | Вебмастеру | 1 | 13-08-2009 10:23 | |
CMD/BAT - [решено] Как исключить обработку одного exe-файла из пакетной обработки нескольких файлов? | Nun-Nun | Скриптовые языки администрирования Windows | 2 | 14-05-2009 12:16 | |
как удалить папку с количеством файлов ,превыщающих 10 млн | illusionmgs | Хочу все знать | 15 | 28-04-2009 19:53 |
|