【问题标题】:Accept " as input from user in a .BAT File?接受“作为 .BAT 文件中用户的输入?
【发布时间】:2019-01-03 11:18:58
【问题描述】:

如何让代码要求用户输入cd "folder one",然后在他们正确输入测试后接受他们的输入并转到标签:2

@echo off

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set /p input=Insert Word:
if /i "%input%"=="cd "folder on""  goto 2
if /i not "%input%"=="cd "folder one"" & goto BEGIN
echo.

:2
echo you did it!
timeout /t 05
exit

【问题讨论】:

  • 您遇到的错误是什么?此外,它应该是goto BEGIN,而不是& goto BEGIN。所以,你的问题是用一个值来检查用户输入(只是一个变量)?这太简单了……
  • 你已经嵌套了"s。试试[%input%]==[cd "folder on"]。请参阅If - Conditionally perform command - Windows CMD - SS64.com 为什么" 会在此处引起问题。
  • 错字:folder on 被使用而不是folder one
  • @DavidPostill 修正不起作用,假设我做得正确。 ---- :BEGIN echo cd "folder one" = 将用户导航到文件夹 1. set /p input=Insert Word: if /i [%input%]==[cd "folder on"] goto 2 if /i not [%input%]==[cd "folder one"] 转到 BEGIN echo。 :2 回声你做到了!超时 /t 05 退出
  • @DavidPostill 空格是命令分隔符。保护它们的唯一方法是使用双引号。 IF 命令不会将尖括号视为要比较的字符串的开头和结尾。

标签: file batch-file cmd command prompt


【解决方案1】:

刚刚发现;您需要转义内部双引号。你可以试试:

@echo off
setlocal EnableDelayedExpansion

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set /p input=Insert Word: 
set input1=cd "folder one"
if /I !input! == !input1! (goto 2) else (goto BEGIN)
echo.

:2
echo you did it^^!
timeout /t 5
exit

在此处使用DelayedExpansion,因为百分号符号会导致无法正确读取双引号。

【讨论】:

  • 它现在接受引号,但是如果我什至输入“a”并按回车,它会回显“你做到了!”回到我的身边。因此,用户不必键入正确的字符串即可在您的 .bat 文件中获得成功的回显消息,如何解决此问题?
  • 需要使用延迟扩展,不要混淆if。我会重新检查一下!
【解决方案2】:
@echo off
setlocal enabledelayedexpansion

:BEGIN
echo cd "folder one" = navigates user to folder 1.
set "item1=cd "folder one""
set /p "input=Insert Word: "
if /i "!input!" == "!item1!" (goto 2) else goto BEGIN

:2
echo you did it^^!
timeout /t 05
exit /b

变量的延迟扩展可以帮助解决这些情况, 因为预扩展变量从字面上扩展为 执行之前的源。延迟扩展存储值 在内存中并在执行时直接比较值。

为确保正确比较,双方可能需要延迟 扩展以避免特殊字符,例如双引号。 双方可能不需要外部双引号,因为它不需要 遭受预扩展的字面语法错误问题 变量。我选择添加外部双引号。

如果您使用,您可能需要禁用延迟扩展 扩展时的预扩展变量,可能包含 感叹号,并在该时间后启用 延迟扩展变量。

查看setlocal /?关于enabledelayedexpansion的使用 和disabledelayedexpansion

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多