【问题标题】:Problem with variables and if statements in a batch file [duplicate]批处理文件中的变量和 if 语句存在问题[重复]
【发布时间】:2020-02-13 08:22:17
【问题描述】:

我尝试编写一个简单的批处理文件,如下所示:

@echo off
title test file

:menu
set /p foo = Select option (1, 2, 3):
if foo == 1 goto one
if foo == 2 goto two
if foo == 3 goto three

:one
echo One!
goto menu

:two
echo Two!
goto menu

:three
echo Three!
goto menu

写入任何给定选项会将"One!" 写入屏幕并将用户返回到menu 标签。我怀疑错误与我声明的变量类型有关,虽然我不知道,因为我是 Batch 的新手......有什么帮助吗?

【问题讨论】:

  • 如果您从set /p foo=Select.. 中删除了= 之前的空格并将foo == 1 更改为%foo% equ 1 它将起作用,除了担心您仍然需要解决一个人可以仍然键入您此时不适合的任何其他字符。 choice 已内置,只能选择定义的字符
  • 我建议在How to stop Windows command interpreter from quitting batch file execution on an incorrect user input? 上阅读我的答案,它非常详细地解释了set /P 的缺点以及如何确保它的安全以及使用命令choice 对选择菜单进行编码是多么容易,如图所示通过这里已经写的答案。

标签: batch-file


【解决方案1】:

注意!!不要不要将我的答案标记为正确,因为它几乎与此处的其他答案完全相同,这只是对用法的看法。

无论如何,作为 100% 正确的 @compo 的 答案的补充,我通常不使用 if errorlevel 而直接使用 goto 来缩短它。

@echo off
title test file

:menu
choice /C 123 /M "Select option"
goto label%errorlevel%

:label1
echo One!
goto menu

:label2
echo Two!
goto menu

:label3
echo three!
goto menu

【讨论】:

    【解决方案2】:

    对于已知的选择不要使用Set /P,而是使用choice

    @Echo Off
    Title test file
    
    :menu
    Choice /C 123 /M "Select option"
    If ErrorLevel 3 GoTo three
    If ErrorLevel 2 GoTo two
    
    :one
    Echo One!
    GoTo menu
    
    :two
    Echo Two!
    GoTo menu
    
    :three
    Echo Three!
    GoTo menu
    

    如果你想继续使用错误的命令,那么类似这样的东西会更像它:

    @Echo Off
    Title test file
    
    :menu
    Set "foo="
    Set /P "foo=Select option [1,2,3]?"
    If Not Defined foo GoTo menu
    If "%foo%"=="1" GoTo one
    If "%foo%"=="2" GoTo two
    If "%foo%"=="3" GoTo three
    GoTo menu
    
    :one
    Echo One!
    GoTo menu
    
    :two
    Echo Two!
    GoTo menu
    
    :three
    Echo Three!
    GoTo menu
    

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 2022-01-09
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 2013-07-19
      • 2019-06-20
      相关资源
      最近更新 更多