如果测试为真,则命令不执行

时间:2013-05-08 22:13:42

标签: if-statement batch-file

我目前正在制作程序,使用存储在.txt文件中的预设信息来改变程序执行的内容。但是,我遇到以下代码段无法正常运行的问题。

@echo off
setlocal enabledelayedexpansion

:load

cls
if exist settings (
    cd settings
    set /p welcomemessage=<"launch message".txt
    set /p color=<color.txt
    cd..
    color !color!
    if !welcomemessage!==false (
        goto command
    )
)

...

:command

...

第二个if(if!welcomemessage!== false ...)运行不正常,因为它没有跳到命令。我找到了一种方法,通过将其移动到主if块之外并替换它来使其工作!与%,但我想知道出了什么问题。

颜色函数正常运行,如果我回显welcomemessage的值,即使在第一个if块内,它也会读取&#34; false&#34;,尽管第二个if仍然没有激活。

3 个答案:

答案 0 :(得分:0)

我能够通过在文件“Launch message.txt”中插入一个前导空格来重现报告的行为

正在发生的事情是在FOR循环中,与变量的当前值进行比较。 “false”与“false”不同,因此if的TRUE分支不会被触发。

在for循环之外,语句

if %welcomemessage%==false ECHO its false

被解释为

if  false==false ECHO its false

因为在执行语句之前替换了变量的分析时间值。请注意if后面有两个空格。执行此操作将导致TRUE。

通过证明,试试这个(在循环之外)

if%welcomemessage%== false ECHO为false  如果%welcomemessage%==!welcomemessage! ECHO是假的  如果“%welcomemessage%”==“!welcomemessage!” ECHO真的,它是

请注意,“false it is”消息缺失...

答案 1 :(得分:0)

如果有空间,那么下面一行的调试将帮助您发现它。我添加了这个答案来说明一种处理文件的简单方法。

@echo off
setlocal enabledelayedexpansion

:load

cls
if exist settings (
    set /p welcomemessage=<"settings\launch message.txt"
    set /p color=<"settings\color.txt"
    echo "!welcomemessage!" "!color!" & pause
    color !color!
    if /i "!welcomemessage!"=="false" goto command
)

...

:command

...

答案 2 :(得分:0)

我发现我没有尝试的是执行以下代码行:echo "!welcomemessage!"我发现"false "显示的"false"echo var >> var.txt不同。 (注意:var将用作任何变量,而不是字面上的文本字符串“var”,并且每次出现时都不一定相同)这告诉我们echo var > var.txtset /p message=<"launch message".txt set message=!message: =! set /p color=<color.txt set color=!color: =! (我以前用过的)生成并编辑程序的不同部分中的“launch message.txt”和“color.txt”文件)都会在它们插入到var.txt中的内容的末尾添加一个空格(此空间是另外一种形式) .txt文件中文本下方的行。)

为了纠正这个问题,我使用了以下代码:(我还缩短了变量名称)

set var=!var: =!

{{1}}替换空格(=符号左侧没有任何内容(右侧)

完成这些操作后,if块正常工作。