我正在嘗試在函式中使用區域變數,但它沒有按預期作業。
@echo off
setlocal
call :Sum %1, %2, sum
echo %sum%
exit /b 0
:Sum
setlocal
set "a=%~1"
set "b=%~2"
set /a "%~3=%a% %b%"
endlocal
exit /b 0
這是腳本的呼叫:
>test.bat 1 2
ECHO is off.
有什么線索嗎?
uj5u.com熱心網友回復:
如果預期結果是將引數總和放入變數中,那么您需要洗掉setlocal/ endlocalinside of :Sum。
:Sum
set "a=%~1"
set "b=%~2"
set /a "%~3=%a% %b%"
exit /b 0
或者你可以從這個答案中嘗試一個技巧Batch script make setlocal variable access by other batch files
call也不鼓勵使用逗號作為引數分隔符。
uj5u.com熱心網友回復:
你得到ECHO is off.是因為%sum%沒有設定。這是一個作業示例:
@echo off
SETLOCAL
CALL :Sum %1, %2, sum
ECHO %sum%
EXIT /B %ERRORLEVEL%
:Sum
SET /A "%~3 = %~1 %~2"
EXIT /B 0
uj5u.com熱心網友回復:
正如@montonero 所提到的,以下hack * 解決了這個問題:
@echo off
setlocal
call :Sum %1 %2 sum
echo %sum%
exit /b 0
:Sum
setlocal
set "a=%~1"
set "b=%~2"
endlocal & (
set /a "%~3=%a% %b%"
)
exit /b 0
命令列endlocal & ...之所以起作用,是因為變數在執行命令列之前已經展開,從而在本地范圍和父范圍之間建立了一座橋梁。
* https://stackoverflow.com/a/18291599/337149
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/491635.html
標籤:批处理文件
上一篇:根據列從文本檔案中洗掉重復行
