我试图拉出.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 :(得分: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
,但如果这些值包含感叹号,则设置变量值时,有时可能会产生负面影响。无论如何,请随意,但如果遇到问题,请记住我的警告。