Область видимости переменной или как передать значения из подпрограммы
Имеется скрипт в котором часть кода вынесена в подпрограммы
Как передать значения переменных которые пристроились внутри подпрограммы в глобальную область видимости?
Код:
<тут начало кода>
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
Ошибка думаю в последней строке подпрограммы, буду благодарен за подсказку
|
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
Еще красивее
Код:
@Echo Off
cls
Call :Sub "Kuku1" "Kuku2" "Kuku3"
echo %Kuku1% %Kuku2% %Kuku3%
pause
GoTo :Eof
:Sub
SetLocal EnableExtensions EnableDelayedExpansion
Set per1=Один
Set per2=Два
Set per3=Три
Endlocal & set %~1=%per1% & set %~2=%per2%& set %~3=%per3%
exit /b
|
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
|
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
Код:
@Echo Off
cls
SetLocal EnableExtensions EnableDelayedExpansion
Set "Mode=Man"
if "%Mode%"=="Man" (
Call :Sub
echo !per1! !per2! !per3!
) Else (
Echo kuku
)
Endlocal
pause
GoTo :Eof
|
Serguei Kouzmine |
27-11-2018 18:08 2842896 |
@megaloman а можно передать *имя* переменной и сделать sub которая бы создала переменную с этим именем ? чтобы использовать как нибудь вот так:
Код:
call :sub /project/artifactId ARTIFACT_ID
echo ARTIFACT_ID=%ARTIFACT_ID%
call :sub //project/groupId GROUP_ID
echo GROUP_ID=%GROUP_ID%
и т.д.
спасибо
|
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
|
Serguei Kouzmine |
27-11-2018 20:19 2842921 |
@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 читает параметры и превращает в переменные - скрипт то лучше чтоб выглядел похоже для разных платформ.
|
Время: 13:26.
© OSzone.net 2001-