Windows批处理中函数的局部变量和返回值

时间:2019-04-04 19:13:05

标签: batch-file

@echo off

set /a n=99

echo before call test3
echo n=%n%

set ret=
call :test3 ret

echo after call test3
echo n=%n%

echo show array:
echo %ret.Array[0]%
echo %ret.Array[1]%
echo %ret.Array[2]%
echo %ret.Array[3]%

ECHO Press any key to close the windows...
pause>NUL
goto :eof

:test3
setlocal
set /a n=0

:Loop-Start
if %n% GEQ 3 goto :Loop-End

endlocal

set %~1.Array[%n%]=V%n%

setlocal

set /a n=n+1

goto :Loop-Start
:Loop-End

endlocal
goto :eof

嗨,

我已经编写了一个名为test3的函数,其局部变量名为n,而test3从调用者那里获得了对名为ret的变量的引用。

如代码中所示,我希望test3使得一个数组具有三个元素,调用程序中名为ret的变量将保存该数组。

但是在调用方打印数组时,发现数组中没有三个元素。

谁可以提供帮助?谢谢

1 个答案:

答案 0 :(得分:0)

已解决。以下是子例程test3的工作代码:

:test3

setlocal EnableDelayedExpansion
set /a n=0

for /l %%i in (0,1,3) do (
   set s1=V!n!

   if defined _ret (
      set _ret=!_ret! ^& 
   )
   set _ret=!_ret!set %~1.Array[!n!]=V!n!

   set /a n=n+1
)

(
   endlocal
   %_ret%
)
goto :eof

谢谢