0

我目前正在制作一个程序来使用存储在 .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 块内,它也会显示“false”,尽管第二个if 仍然没有激活。

4

3 回答 3

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

...
于 2013-05-09T11:08:17.397 回答
0

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

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

set /p message=<"launch message".txt
set message=!message: =!
set /p color=<color.txt
set color=!color: =!

set var=!var: =!替换空格(在 = 符号的左侧没有任何内容(在右侧)

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

于 2013-05-10T03:00:55.243 回答
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 回显它的 false if %welcomemessage%==!welcomemessage! ECHO false 如果 "%welcomemessage%"=="!welcomemessage!" ECHO 真的是

请注意,缺少“它是假的”消息...

于 2013-05-09T02:30:57.993 回答