选择命令仅在 if 嵌套中返回 errorelevel=0

选择命令仅在 if 嵌套中返回 errorelevel=0

我在 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

相关内容