第一行文本文件批量变量

时间:2015-03-02 18:22:08

标签: batch-file set echo var

我试图拉出.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

1 个答案:

答案 0 :(得分:1)

每当set括号内的变量时,如果要在同一代码块中检索该变量,则必须以延迟扩展样式执行此操作。例如:

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

...将回显“apples”,因为这是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
)

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