批处理文件 - FOR / IF 语句中带有数字和文本的错误

Batch File - Error in FOR / IF statement with numbers and text

这些代码以前是有效的。我在 "FOR" 行中添加了一些额外的字母,但现在它不起作用了。

目标:获取用户输入。用户输入可以是数字或字母。将输入设置为 "SELECTION".

:choice1
A. 1-12
B. 1-7
   1.  stuff
   2.  more stuff
   etc to 7
C.  8-10
   8.
    etc to 10
D.  11-12
  11....
  12...

SET /P c= Make a selection or eXit (X)...
CLS
IF /i %c%==X GOTO choice1
IF %A%==1 FOR %%I IN (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C D) DO (
    IF /i #%c%==#%%I SET SELECTION=%c%
    EXIT /B
    )

IF %A%==2 FOR %%I IN (1 2 3 4 5 6 7 8 9 10 13 A B C D) DO (
    IF /i #%c%==#%%I SET SELECTION=%c%
    EXIT /B
    )

它没有将 SELECTION = %c% 设置为真。我假设它没有在应该返回 TRUE 的时候返回。这是以前的工作。我不明白发生了什么变化。原来的代码行是:

IF %A%==1 FOR %%I IN (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 E) DO IF /i #%c%==#%%I SET SELECTION=%c% & EXIT /B

改变的是,在原来的代码中,SET SELECTION=%c% & EXIT /B执行了IF /i #%c%==#%%I

使用您修改后的代码,SET SELECTION=%c% 会执行 IF /i #%c%==#%%I 并且无论如何都会执行 exit

轻松修复:

IF %A%==1 FOR %%I IN (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 A B C D) DO IF /i #%c%==#%%I (
    SET SELECTION=%c%
    EXIT /B
    )

但是请注意,selection 将有一个尾随 space 的原始代码,但显然没有修改后的代码。