我在 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。
答案1
您的问题源于您在代码块内扩展变量。代码块内的环境变量在代码块被读入内存时(在执行之前)进行扩展。解决此问题的一个选项是使用以下命令在代码块之前启用延迟扩展:Setlocal EnableDelayedExpansion
并使用感叹号扩展需要运行时值的变量:!variablename!
另一个解决方案是使用 for /f 循环来捕获响应选择命令时按下的键:
Echo([Y]es [N]o
For /f Delims^= %%G in ('choice /n /c:YN')Do if /I "%%G"=="Y" goto:anotherfile
Goto:notfound