【问题标题】:Batch Scripting Adventure批处理脚本冒险
【发布时间】:2011-08-05 09:11:40
【问题描述】:

这是我的批处理脚本文件。有两种情况


  • 场景 1

@echo off
set name=
set /P TypeName=Name: %=%

if %TypeName% == "abcd" goto correctName
else goto wrongName

:correctName
echo Correct Name
:end

:wrongName
echo Wrong Name
:end

当我输入 abcd 作为输入时,我得到 'else' 不是内部或外部命令、可运行程序或批处理文件

名字错误


  • 场景 2

@echo off
set name=
set /P TypeName=Name: %=%

if %TypeName% EQA "abcd" goto correctName
if %TypeName% NEQ "abcd" goto wrongName

:correctName
echo Correct Name
:end

:wrongName
echo Wrong Name
:end

当我输入 abcd 作为输入时,我得到 此时 EQA 是意外的。

我的脚本有问题吗?我在这里遗漏了什么

【问题讨论】:

  • 对了,你也可以使用IF NOT something == somethingelse …

标签: windows if-statement batch-file


【解决方案1】:
  1. ELSE 应与 IF 关键字位于同一行,或与与 IF 相关的右括号位于同一行。

    像这样:

    IF %TypeName% == "abcd" GOTO correctName ELSE GOTO wrongName
    

    或者像这样:

    IF %TypeName% == "abcd" (
      ECHO Correct.
      GOTO correctName
    ) ELSE GOTO wrongName
    
  2. Equal 运算符的正确关键字是EQU

    IF %TypeName% EQU "abcd" GOTO correctName
    

【讨论】:

  • 这是一个不同的问题。在回显Correct Name 后,您需要跳过:wrongName 部分。尝试将GOTO :EOF 放在ECHO Correct Name 之后。而且你不能使用两个同名的标签(我的意思是:end 标签)。
  • 我遵循了你的这个解决方案 - IF %TypeName% == "abcd" GOTO correctName ELSE GOTO wrongName and if %TypeName% EQU "abcd" goto correctName else goto wrongName 我得到了正确的名称错误名称然后我按照你的这个解决方案 - IF %TypeName% == "abcd" (ECHO Correct. GOTO correctName) ELSE GOTO wrongName 我得到了 - 错误的名字
  • 实际上我想说的是我的 if 条件有问题。即使我给出了正确的输入值,它也没有验证。
  • 您的问题太宽泛了。您不能认真地期望我一口气解决您的示例脚本的所有问题。请从这里的所有答案中得到什么。如果出现其他任何问题,请发布一个新问题(如果它确实是一个不同的问题,到目前为止证明是这样)。我想通过您的回复,我在回答中提到的问题已经解决了。
  • 您需要将%TypeName% 放在双引号中,这是首先想到的。如果这没有帮助,请发布一个新问题。这个变得一团糟。
【解决方案2】:

第一个例子几乎是对的,只是批处理文件中的 IF/ELSE 语句的格式如下:

IF <statement>  (
..
..
) ELSE (
...
...
)

所以只要你使用这种格式,它应该可以工作。

【讨论】:

  • 会有什么不同吗?因为我在两种情况下都只使用一个语句
【解决方案3】:

你不一定需要像这样使用else

@echo off
set name=
set /P TypeName=Name: %=%

if %TypeName% == "abcd" goto correctName
goto wrongName

:correctName
echo Correct Name
:end

:wrongName
echo Wrong Name
:end

如果 %TypeName% == "abcd" 它将跳转到 :correctName,否则它会简单地跳到下一行并跳转到 :wrongName。

【讨论】:

  • 这也不起作用。我输入“abcd”作为输入,它仍然给我“错误名称”作为输出无论发生什么,它都会跳转到 else 条件。
  • 我不太确定,虽然代码应该可以工作,但似乎出了点问题,我之前遇到了批处理问题,由于某种原因,代码无法正常工作。尝试用另一个变量名重新编写一个新批次,然后重试。
  • 我已经回答了我自己的问题。它对我有用。我必须用“”包围 %TypeName%..
  • 太好了,很高兴你把它整理好了。
【解决方案4】:

为了结束这篇文章,我以这种方式得到了预期的输出-

@echo off
set name=
set /P TypeName=Name: %=%

if "%TypeName%" == "abcd" (
echo Correct Name
) else (
echo Wrong Name
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多