我在 IF 的嵌套中执行调用选择命令,但它只返回“errorlevel=0”。当我用完 if 时,它可以正常工作并在我选择 y=yes 时返回值 1。
我使用了链接中显示的命令:
正确使用选择内部调用功能
命令代码:
if "%opm%"=="1" (
if "%sel%"=="out" (
for /f skip^=4 %%e in ('echo;prompt $E^|cmd') do (set "_$E=%%e")
set /p "'=%_$E%[31mThere are no files in the folder! Do you want to search another file? %_$E%[31m" <nul
call choice /n /m "(y=yes/n=no)"
if "%errorlevel%"=="1" (
goto anotherfile
)else (
endlocal & goto notfound
)
)
)
无论我选择哪个选项都会返回 errorlevel=0。
您的问题源于您在代码块中扩展变量的事实。当代码块被读入内存时,代码块中的环境变量会在它执行之前被扩展。解决此问题的一种选择是使用以下命令在代码块之前启用延迟扩展:
Setlocal EnableDelayedExpansion
并使用感叹号扩展需要运行时值的变量:!variablename!
另一种解决方案是使用 for /f 循环来捕获响应选择命令而按下的键: