ser*_*gej 4 windows cmd batch-file
我在批处理脚本中有以下“功能”:
:myfunction
setlocal
set _variable=%*
:: do something with %_variable%
endlocal
exit /B 0
Run Code Online (Sandbox Code Playgroud)
注意setlocal/endlocol对。
正在endlocal这里需要?或者它是多余的?是否exit隐式结束本地化?
额外问题:可以在不测试行为的情况下回答这个问题,例如通过引用官方消息来源吗?
我不确定您是否有什么想问的,但还没有,但鉴于您发布的脚本,您可以这样测试它:
@Echo Off
Set "_variable="
Call :MyFunction "argument"
Set _variable
Pause
GoTo :EOF
:MyFunction
SetLocal
Set "_variable=%~1"
Exit /B 0
Run Code Online (Sandbox Code Playgroud)
如果您收到一条消息,说明Environment variable _variable not definedthenSetLocal已被Exit命令关闭,即Exit隐式结束本地化。
考虑两个批处理文件,a.bat并且b.bat. 批处理文件a.bat调用b.bat并且还调用本地子例程:c。
@echo off
rem -------------
rem This is a.bat
rem -------------
echo Outer A=%A%
setlocal
set A=Value_A
echo Local A=%A%
echo Calling b.bat
call b.bat
echo Back from b.bat
echo A=%A%
echo Calling subroutine :c
call :c
echo Back from subroutine :c
echo A=%A%
exit /b
:c
setlocal
set A=Value_C
echo Inside subroutine :c A=%A%
exit /b
Run Code Online (Sandbox Code Playgroud)
@echo off
rem -------------
rem This is b.bat
rem -------------
setlocal
set A=Value_B
echo Inside b.bat A=%A%
Run Code Online (Sandbox Code Playgroud)
运行a.bat产生:
C> a.bat
Outer A=
Local A=Value_A
Calling b.bat
Inside b.bat A=Value_B
Back from b.bat
A=Value_A
Calling subroutine :c
Inside subroutine :c A=Value_C
Back from subroutine :c
A=Value_A
Run Code Online (Sandbox Code Playgroud)
请注意,看不到任何东西endlocal。
| 归档时间: |
|
| 查看次数: |
1561 次 |
| 最近记录: |