我目前正在制作程序,使用存储在.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仍然没有激活。
答案 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.txt
和set /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块正常工作。