Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 即使测试为真,If命令仍不执行_If Statement_Batch File - Fatal编程技术网

If statement 即使测试为真,If命令仍不执行

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

我目前正在制作一个程序,使用存储在.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

...
@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: =!