Batch file 此Windows批处理代码有什么问题?
它总是打印Batch file 此Windows批处理代码有什么问题?,batch-file,windows-7,Batch File,Windows 7,它总是打印X的上一个值,而不是两个数字的总和: REM test.bat @ECHO OFF IF NOT "%~1" == "" IF NOT "%~2" == "" ( SET /A "X=%~1+%~2" echo %X% ) 这是因为我没有使用enabledayedexpansion 编辑:当我将回声移出范围时,它为什么会起作用 >test.bat 1 2 ECHO is off >test.bat 3 4 3 >test.bat 4 4 7
X
的上一个值,而不是两个数字的总和:
REM test.bat
@ECHO OFF
IF NOT "%~1" == "" IF NOT "%~2" == "" (
SET /A "X=%~1+%~2"
echo %X%
)
这是因为我没有使用
enabledayedexpansion
编辑:当我将回声移出范围时,它为什么会起作用
>test.bat 1 2
ECHO is off
>test.bat 3 4
3
>test.bat 4 4
7
@ECHO OFF
:: using call
IF NOT "%~1" == "" IF NOT "%~2" == "" (
SET /A "X=%~1+%~2"
call echo %%X%%
)
@ECHO OFF
:: using tunneling
setlocal enableDelayedExpansion
IF NOT "%~1" == "" IF NOT "%~2" == "" (
SET /A "X=%~1+%~2"
rem echo !X!
)
endlocal & set x=%x%
echo %x%
正如您指出的延迟扩展-我想您知道如何修复它-想要避免使用它的唯一(afaik)原因是,如果您希望变量在endlocal语句中生存,同时使用括号上下文中的变量值。因此,您可以使用其他调用或隧道:
@ECHO OFF
IF NOT "%~1" == "" IF NOT "%~2" == "" (
SET /A "X=%~1+%~2"
GOTO why
)
GOTO :EOF
:why
echo %X%
已进行编辑
该调用使用继承的变量启动命令提示的新子上下文。其他%s用于在下一级别展开该变量
当我将回声移出范围时,它为什么工作
>test.bat 1 2
ECHO is off
>test.bat 3 4
3
>test.bat 4 4
7
@ECHO OFF
:: using call
IF NOT "%~1" == "" IF NOT "%~2" == "" (
SET /A "X=%~1+%~2"
call echo %%X%%
)
@ECHO OFF
:: using tunneling
setlocal enableDelayedExpansion
IF NOT "%~1" == "" IF NOT "%~2" == "" (
SET /A "X=%~1+%~2"
rem echo !X!
)
endlocal & set x=%x%
echo %x%
GOTO会破坏括号上下文,但在这种情况下,即使没有GOTO,也会打印%x%的正确值,因为它在括号之外。这是因为我没有使用EnableDelayedExpansion吗-对