If statement 即使测试为真,If命令仍不执行
我目前正在制作一个程序,使用存储在.txt文件中的预设信息来改变程序执行的内容。但是,我遇到了以下代码段无法正常运行的问题If statement 即使测试为真,If命令仍不执行,if-statement,batch-file,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.. col
@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
...
@echo关闭
延迟扩展
:装载
cls
如果存在设置(
cd设置
set/p welcomemessage=通过在文件“Launch message.txt”中插入前导空格,我能够重现报告的行为
发生的情况是,在FOR
循环中,与变量的当前值进行比较。“false”与“false”不同,因此如果不触发的TRUE分支
在for循环之外,语句
if %welcomemessage%==false ECHO its false
被解释为
if false==false ECHO its false
因为变量的解析时间值在执行语句之前被替换。请注意,if
后面有两个空格。执行此操作将导致TRUE
作为证明,试试这个(在循环之外)
如果%welcomemessage%==false,则回显其false
如果%welcomemessage%==!welcomemessage!回显为false,则为
如果“%welcomemessage%”==“!welcomemessage!”真的回显,则为
请注意,“false it is”消息丢失了…如果有空格,那么下面这行之类的调试将帮助您找到它。我添加此答案也是为了说明处理文件的更简单方法
@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
...
@echo关闭
延迟扩展
:装载
cls
如果存在设置(
set/p welcomemessage=我发现我没有尝试的是执行以下代码行:echo“!welcomemessage!”
,我发现它显示了“false”
,这与“false”
不同(注意:var将用作任何变量,而不是字面上的文本字符串“var”)这告诉我们,echo var>>var.txt
和echo var>var.txt
(我用来在程序的不同部分生成和编辑“launch message.txt”和“color.txt”文件)都在插入var.txt的文件末尾添加了一个空格(此空格以.txt文件内文本下方的附加行的形式显示)
为了纠正这一点,我使用了以下代码:(我还缩短了变量名)
set/p message=我猜这是您文件的内容。如果您需要帮助,我们将需要解释它的代码。@ChrisCooney这是Windows shell。这是给我带来麻烦的代码段;它解释的两个文件只是.txt文件,具有标准颜色集格式(例如“47”)和“true”或“true”“错"另一个。每个都在“设置”文件夹中,该文件夹与运行此代码段的.bat文件位于同一目录中。@endro Yes;我可以在设置后将echo!welcomemessage!放在if块中/p welcomemessage=根据文本文件的确切内容,!welcomemessage!的一侧或另一侧可能有空格其他,或引号等。尝试一个回音-!welcomemessage!-
——注意两边的-
——您试图查看其中是否有空格或其他字符。
set /p message=<"launch message".txt
set message=!message: =!
set /p color=<color.txt
set color=!color: =!