Batch file 在set/p输入中包含空格会自动使批处理程序崩溃

Batch file 在set/p输入中包含空格会自动使批处理程序崩溃,batch-file,Batch File,我是批处理编程的新手,但我似乎找不到解决问题的答案。每当我在批处理文件中包含set/p命令时,输入任何包含字母之间空格的内容都会立即关闭程序。 下面是有问题的代码: set /p action=">>" if not defined action goto nothing if /i %action% equ fight goto fight if /i %action% equ magic goto magic if /i %action% equ heal goto heal i

我是批处理编程的新手,但我似乎找不到解决问题的答案。每当我在批处理文件中包含
set/p
命令时,输入任何包含字母之间空格的内容都会立即关闭程序。 下面是有问题的代码:

set /p action=">>"
if not defined action goto nothing
if /i %action% equ fight goto fight
if /i %action% equ magic goto magic
if /i %action% equ heal goto heal
if /i %action% equ "do nothing" goto nothing
goto battscr

很明显,我试图创建一个对输入的响应,“什么也不做”,但每次用户在字符之间键入空格时,按下enter键后,它将立即关闭。通过cmd运行批处理时会出现错误“此时没有意外情况”。其中“nothing”指空格后的输入。

使用以下语法之一:

IF /I "%VARIABLE%" EQU "STRING" GOTO LABEL
或者最好是:

IF /I "%VARIABLE%"=="STRING" GOTO LABEL

双引号包含在比较中。

使用以下语法之一:

IF /I "%VARIABLE%" EQU "STRING" GOTO LABEL
或者最好是:

IF /I "%VARIABLE%"=="STRING" GOTO LABEL

双引号包含在比较中。

答案会直接打印到屏幕上:“此时没有意外情况”之后,您会看到
如果/i不做任何事情,请继续战斗
。请注意,这确实遵循了允许的语法
if/i string1 eq string2…
。对不起,我似乎不明白您的答案。变量为%action%<代码>如果/我什么都不做,就等于战斗,就像“什么都不做”是变量一样,当我想让它成为变量等于的输入时。此外,当批处理在cmd中运行时,出现错误“此时无意外”,它会立即关闭bat并跳转到我的C:目录。之后与bat相关的任何事情都不会发生。如前所述,语法为
if/i string1 eq string2
——在
eq
之前只有一个字符串,但您要放置两个。解析器希望
/i
后面的第二个单词是
eq
,但它是
nothing
。谢谢,我忘了它会在到达最后一个变量之前遍历每个变量。我通过在每个变量周围放置括号来修复它,以便它将其视为1个字符串。固定代码:set/p action=“>>”如果未定义,则操作转到nothing if/i“%action%”如果“%action%”如果“%action%”如果“%action%”如果/i“%action%”如果/i“%action%”则操作转到fight在你问问题之前,你应该考虑阅读一个命令的帮助。打开cmd提示符并键入:
IF/?
答案将直接打印到您的屏幕上:“此时没有意外情况”之后,您将看到
IF/i不做任何事情,等着战斗,等着战斗
。请注意,这确实遵循了允许的语法
if/i string1 eq string2…
。对不起,我似乎不明白您的答案。变量为%action%<代码>如果/我什么都不做,就等于战斗,就像“什么都不做”是变量一样,当我想让它成为变量等于的输入时。此外,当批处理在cmd中运行时,出现错误“此时无意外”,它会立即关闭bat并跳转到我的C:目录。之后与bat相关的任何事情都不会发生。如前所述,语法为
if/i string1 eq string2
——在
eq
之前只有一个字符串,但您要放置两个。解析器希望
/i
后面的第二个单词是
eq
,但它是
nothing
。谢谢,我忘了它会在到达最后一个变量之前遍历每个变量。我通过在每个变量周围放置括号来修复它,以便它将其视为1个字符串。固定代码:set/p action=“>>”如果未定义,则操作转到nothing if/i“%action%”如果“%action%”如果“%action%”如果“%action%”如果/i“%action%”如果/i“%action%”则操作转到fight在你问问题之前,你应该考虑阅读一个命令的帮助。打开cmd提示符并键入:
IF/?