|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Область видимости переменной или как передать значения из подпрограммы |
|
CMD/BAT - [решено] Область видимости переменной или как передать значения из подпрограммы
|
Новый участник Сообщения: 26 |
Имеется скрипт в котором часть кода вынесена в подпрограммы
Как передать значения переменных которые пристроились внутри подпрограммы в глобальную область видимости? <тут начало кода> call:Подпрограмма <тут еще немного кода> echo %per1%%per2%%per3% :: Должно вывести "ОдинДваТри" pause <тут конец кода> :Подпрограмма setlocal enableextensions enabledelayedexpansion Set per1=Один Set per2=Два Set per3=Три endlocal & set per1=%per1% & set per2=%per2%& set per3=%per3% exit /b |
|
Отправлено: 12:47, 26-11-2018 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать wlad1164,
У меня работает
@Echo Off cls Call :Sub echo %per1% %per2% %per3% pause GoTo :Eof :Sub SetLocal EnableExtensions EnableDelayedExpansion Set per1=Один Set per2=Два Set per3=Три Endlocal & set per1=%per1% & set per2=%per2%& set per3=%per3% exit /b |
------- Последний раз редактировалось megaloman, 26-11-2018 в 13:36. Отправлено: 13:28, 26-11-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Отправить PM | Цитировать megaloman, Действительно, проблема проявляется когда call:подпрограмма помещена внутрь IF
cls Set Mode=Man if "%Mode%"=="Man" ( Call :Sub echo Mode MAN echo %per1% %per2% %per3% pause ) pause exit GoTo :Eof :Sub SetLocal EnableExtensions EnableDelayedExpansion Set per1=Один Set per2=Два Set per3=Три Endlocal & set per1=%per1% & set per2=%per2%& set per3=%per3% exit /b Возникла мысль вынести в конец скрипта (после команды exit) части кода, вроде как сработало, но нормально и так делать? cls Set Mode=Man if "%Mode%"=="Man" ( goto:НачалоMan :КонецMan echo %per1% %per2% %per3% ) pause exit GoTo :Eof :Sub SetLocal EnableExtensions EnableDelayedExpansion Set per1=Один Set per2=Два Set per3=Три Endlocal & set per1=%per1% & set per2=%per2%& set per3=%per3% exit /b :НачалоMan Call :Sub echo Mode MAN goto:КонецMan exit /b |
Отправлено: 14:29, 26-11-2018 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать wlad1164,
Варианты
@Echo Off cls Set "Mode=Man" if Not "%Mode%"=="Man" GoTo :Cont Call :Sub echo %per1% %per2% %per3% :Cont Echo kuku pause GoTo :Eof :Sub SetLocal EnableExtensions EnableDelayedExpansion Set per1=Один Set per2=Два Set per3=Три Endlocal &set per1=%per1% &set per2=%per2% &set per3=%per3% exit /b @Echo Off cls Set "Mode=Man" if "%Mode%"=="Man" Call :Sub echo %per1% %per2% %per3% pause GoTo :Eof |
------- Отправлено: 14:46, 26-11-2018 | #4 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 18:08, 27-11-2018 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Serguei Kouzmine,
Похоже можно, хотя не очень понял, что нужно. В самом первом моём посте подобный вариант рассматривался (переменные kuku)
@Echo Off cls Call :Sub "Om mani padme hum" "Mantra" Echo Mantra=%Mantra% Echo: Call :Sub "/project/artifactId" "ARTIFACT_ID" Echo ARTIFACT_ID=%ARTIFACT_ID% Echo: Call :Sub "//project/groupId" "GROUP_ID" Echo GROUP_ID=%GROUP_ID% Echo: Echo 222222: Call :Sub2 "/project/artifactId" "ARTIFACT_ID" Echo ARTIFACT_ID=%ARTIFACT_ID% Echo: Echo 222222: Call :Sub2 "//project/groupId" "GROUP_ID" Echo GROUP_ID=%GROUP_ID% pause GoTo :Eof :Sub Set "%~2=%~1" exit /b :Sub2 Set "%~2=%~2" exit /b |
------- Отправлено: 18:41, 27-11-2018 | #6 |
Старожил Сообщения: 250
|
Профиль | Отправить PM | Цитировать @megaloman
спасибо сейчас попробую Это помоему весьма полезно для java pom.xml "все в одном флаконе" javafx проектов на стадии разработки . потому что "все" не всегда озачает "и spring". и чтобы собрать и запустить немного по разному jar set COMMAND=^ java ^ -cp %TARGET%\%APP_JAR%;%TARGET%\lib\* ^ %APP_PACKAGE%.%MAIN_CLASS% ^ %1 %2 %3 %4 %5 %6 %7 %8 %9 echo %COMMAND%>&2 %COMMAND% на маке и linux это шел а на ***де это нехорошо делатьв Powershell - очень медленный то есть cmd + mshta из pom.xml читает параметры и превращает в переменные - скрипт то лучше чтоб выглядел похоже для разных платформ. |
Отправлено: 20:19, 27-11-2018 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Установка значения переменной из значечния реестра | idlazarev_alex@vk | Скриптовые языки администрирования Windows | 1 | 09-02-2015 12:04 | |
PHP область видимости переменной | morebeauty | Вебмастеру | 5 | 04-06-2014 01:21 | |
[решено] Присвоить значения переменной из текстового файла | Cem | AutoIt | 9 | 05-03-2014 19:11 | |
CMD/BAT - [решено] Увеличение значения имени переменной или считывание строки файла в переменную | VokaMut | Скриптовые языки администрирования Windows | 12 | 26-11-2012 15:54 | |
[решено] cms Joomla, подключение файла в модуль, область видимости переменных | zvezda_t | Вебмастеру | 10 | 24-02-2011 11:45 |
|