我很想知道,如果用户什么都不输入,或者只是键入不是Y或N的任何其他内容再次询问他。
我尝试了一些事情。我真的很新,所以我需要帮助。 (什么都不是)输入或您输入的不是Y或N的其他任何东西
set /p again=Repeat again? [Y/N]=
if /i %again%== (Nothing) goto second
if /i %again%== N exit
if /i %again%== Y goto again
:second
set /p again=Repeat again? [Y/N]=
if /i %again%== (Nothing) goto second
if /i %again%== N exit
if /i %again%== Y goto again
如果您只是输入或键入不是Y或N的其他内容,则会再次询问一次并退出。
答案 0 :(得分:2)
您遇到的问题是因为您对任务使用了不正确的命令。当您使用Set /P
时,最终用户可以自由输入(其中包括有害字符)。解决方案是使用正确的命令Choice
,该命令仅允许特定的条目。要确切了解如何使用Choice
命令,请打开“命令提示符”窗口,然后输入choice /?
。
这是我可以使用Choice
命令执行的操作。
在batch-file中:
Choice /C yn /N /M "Attack again [Y/N]="
If ErrorLevel 2 Exit /B
GoTo again
答案 1 :(得分:1)
如果您输入的字符串带有set/p
,则无需说输入的数据不包含空格。克服该问题的方法是"enclose the strings on both sides of the comparison operator in quotes"
-即用双引号'not single quotes'
SET / P“ var = Prompt”不会更改var
。因此,如果var
原本为空,则它仍为空。
if /i "%var%"=="value"
对空变量/值或包含分隔符(例如空格)的变量/值进行比较。'/ i'使比较不区分大小写。
IF DEFINED var
为真(请注意:不是var
。)
使用语法%var%
(其中值可能为空;在这种情况下,SET "var=value"
将变为 undefined ),以确保该值中不包含任何多余的尾随空格分配。
在您的代码中,未定义标签 var
,尽管可以定义变量 again
(取决于用户输入)。< / p>
如果您输入的值既不是again
也不是y
也不是 empty ,那么您的代码将直接进入下一条语句,例如,如果输入{{ 1}}在第一个n
处执行,然后简单地执行所有z
测试到标签set/p
并执行第二个if
命令。
例如:
second