在批处理文件中使用嵌套的CALL函数和CHOICE命令时,我有一个相当混乱的问题。
总结为伪代码:
1。)使用CHOICE命令,当选择正确的选项时使用CALL:function1
2。):function1使用CALL:setVar_n
3。):setVar_n设置变量列表,并以EXIT / B结尾返回:function1
4。):功能1具有CHOICE命令(是/否),其中Y将继续执行操作,然后以EXIT / B结尾,而N立即以EXIT / B结尾
问题:
:function1中的CHOICE命令始终计算为N(第二个选项),无论输入如何。
我不明白为什么使用%ERRORLEVEL%会失败,而IF ERRORLEVEL可以正常工作。我也不确定为什么使用CALL首先会使%ERRORLEVEL%停止工作。
我试图避免重写每个选择命令(必须至少有50个,其中一些具有25个以上的选项)。
使用%ERRORLEVEL%编写时失败:
::Return from setVar_n here
CHOICE /C YN /M "Continue? Y/N >"
IF %ERRORLEVEL%==2 (EXIT /B)
::function1 continues here
如果我使用IF错误级别:
::Return from setVar_n here
CHOICE /C YN /M "Continue? Y/N >"
IF ERRORLEVEL 2 (EXIT /B)
::function1 continues here
它正常工作。问题是即使:function1结束后,CHOICE问题仍然存在。它会影响整个文件中的所有CHOICE命令,因此%ERRORLEVEL%根本无法使用。
任何人都可以阐明这个问题吗?
这里是要测试的完整文件代码,可能更有意义:
@ECHO OFF
:start
choice /c ABC
if %errorlevel%==1 (goto start)
if %errorlevel%==2 (call :function1)
if %errorlevel%==3 (goto start)
echo Function 1 completed
pause
choice /c ABC
if %errorlevel%==1 (echo 1)
if %errorlevel%==2 (echo 2)
if %errorlevel%==3 (echo 3)
pause
exit
:setVar
set /a var1=2
set /a var2=3
exit /b
:function1
echo In Function 1
call :setVar
choice /c YN /m "Continue (Y) or Finish (N)"
if %errorlevel%==2 (exit /b)
echo Still inside function 1
exit /b
答案 0 :(得分:0)
感谢斯蒂芬在评论中提供正确答案。
解决方案是使用
set "errorlevel="
在choice
命令之前。