批|如果不是%var%== String |不工作

时间:2014-11-11 22:59:01

标签: batch-file if-statement

我的批处理程序有点问题。它很简单,我打算让它显示一个输出,但只有当它不相等时。但是......我遇到了问题。这是我目前的代码;

注意:它被修改为隐藏敏感信息以及删除不相关的代码。

@echo off
TITLE //
set mode=0
set output=Surrr

:WORKSTATION
cls
if statements here //
echo.
if NOT "%output%"=="Surrr" (
    echo %output%
    set output=Surrr )

if statements //

set /p "i="
if /I %i%==FTP (
    goto FTP )
if /I %i%==RDP (
    goto RDP )
if /I %i%==HTML (
    set mode=1 
    goto WORKSTATION )
if /I %i%==GAMEMAKER (
    set mode=2 
    goto WORKSTATION )
if /I %i%==EXIT (
    exit
    goto WORKSTATION
 ) else (
     set output=Invalid Input
     goto WORKSTATION )

unrelated code //

现在,当我键入一个不起作用的输入时,它会将输出设置为“Invalid Input”并按原样显示它。问题是当我输入有效输入时,该字被重置为“Surrr”但未被if NOT语句拾取。此后,不应该显示“Surrr”。

我一般都处于停滞状态。有什么建议/想法可以克服这个问题吗? 任何事都会有所帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

你应该引用你的字符串作业" - 因此:

set "output=Surrr"

这样的陈述的问题
...
set output=Surrr )

是空间包含在分配的值中,因此"%output%"将是Surrr Space ,而不是Surrr,因为您可能会通过调试{{{ 1}}(这就是为什么在调试时我倾向于echoecho,因此+++结尾echo +++%output%+++ - 它会使隐形空间变得明显)

您还应该使用(例如)

if /I "%i%"=="HTML" (

在处理用户输入时的首选项。如果用户在响应中键入空格或逗号,引用输入可确保if语句在语法上是正确的(不是防弹,但处理许多用户输入错误)