2015-03-02 97 views
1

我想拉第一行的.txt文件,并将其分配给变量,但在循环内。我的变量没有正确分配。它继续显示“ECHO关闭”。但是,当循环返回时,即使它是相同的代码,它也能正确显示。我怎样才能让它显示我想要第一次的文字?第一行文本文件批量变量

代码:

@Echo off 
:ReadLoop 
if exist "<Full\Path\Name>\Note0.txt" (
set /p Var=<"<Full\Path\Name>\Note0.txt" 
Echo %Var% 
pause>nul 
goto :ReadLoop 
) 

输出我得到的是这样的:

Echo is off. 
Note0 Content 
Note0 Content 
Note0 Content 
+0

该代码似乎很好。不过,我注意到一些奇怪的事情发生时,如果我使用块语句,即如果(做东西..做更多的东西)。我所做的是使用内联if语句如果存在“myFile”做东西,而另一个如果存在“myFile”做剩下的事情。只要尝试内联ifs,看看它是否发生了变化。 – 2015-03-02 20:25:20

回答

1

每当你set一个括号的代码块中的变量,如果你想获得相同的代码块内的变量,你必须在延期扩展风格中这样做。例如:

set "test=apples" 
(
    set "test=oranges" 
    echo %test% 
) 

...将回声“苹果”,因为这是代码块达到当test变量所具有的值。在另一方面,

set "test=apples" 
(
    set "test=oranges" 
    setlocal enabledelayedexpansion 
    echo %test% and !test! 
    endlocal 
) 

将回声“苹果和桔子”,因为!test!扩展被延迟,而%test%不是。在控制台窗口中,有关更多信息,请参阅setlocal /?

现在,将这些知识应用到您的代码中。

@Echo off 
setlocal 

:ReadLoop 
if exist "<Full\Path\Name>\Note0.txt" (
    set /p Var=<"<Full\Path\Name>\Note0.txt" 
    setlocal enabledelayedexpansion 
    Echo !Var! 
    endlocal 
    pause>nul 
    goto :ReadLoop 
) 

...会给你你期望的结果。您可以在@echo off以下的脚本开始处激活enabledelayedexpansion,但如果这些值包含感叹号,则在设置变量值时有时会产生不利影响。无论如何,请放心,但如果您遇到问题,请记住我的警告。