如果您没有在(IF)中放入任何内容,然后按Enter键,它将如何正确运行,该怎么办?

时间:2019-09-28 20:36:54

标签: batch-file cmd

我很想知道,如果用户什么都不输入,或者只是键入不是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的其他内容,则会再次询问一次并退出。

2 个答案:

答案 0 :(得分:2)

您遇到的问题是因为您对任务使用了不正确的命令。当您使用Set /P时,最终用户可以自由输入(其中包括有害字符)。解决方案是使用正确的命令Choice,该命令仅允许特定的条目。要确切了解如何使用Choice命令,请打开“命令提示符”窗口,然后输入choice /?

这是我可以使用Choice命令执行的操作。

中:

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'

如果仅按 Enter ,则

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