Batch file 文本文件的第一行在批处理中变为变量
我试图提取.txt文件的第一行,并将其分配给循环内部的变量。我的变量分配不正确。它一直显示“回声关闭”。但是,当循环返回时,即使是相同的代码,它也会正确显示。我怎样才能让它第一次显示我想要的文本 代码:Batch file 文本文件的第一行在批处理中变为变量,batch-file,set,echo,var,Batch File,Set,Echo,Var,我试图提取.txt文件的第一行,并将其分配给循环内部的变量。我的变量分配不正确。它一直显示“回声关闭”。但是,当循环返回时,即使是相同的代码,它也会正确显示。我怎样才能让它第一次显示我想要的文本 代码: 每当在附加代码块中设置变量时,如果要在同一代码块中检索该变量,则必须采用延迟扩展样式。例如: set "test=apples" ( set "test=oranges" echo %test% ) 。。。将回显“apples”,因为这是到达代码块时test变量的值。另一方面,
每当
在附加代码块中设置变量时,如果要在同一代码块中检索该变量,则必须采用延迟扩展样式。例如:
set "test=apples"
(
set "test=oranges"
echo %test%
)
。。。将回显“apples”,因为这是到达代码块时test
变量的值。另一方面,
set "test=apples"
(
set "test=oranges"
setlocal enabledelayedexpansion
echo %test% and !test!
endlocal
)
将呼应“苹果和橙子”,因为扩展了!测试代码>延迟,而%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关闭
setlocal
:ReadLoop
如果存在“\Note0.txt”(
设置/p变量=nul
goto:ReadLoop
)
。。。会给你你期望的结果。您可以在脚本开头的@echo off
下方激活enabledelayedexpansion
,但如果这些值包含感叹号,则这样做有时会对设置变量值产生不利影响。无论如何,请放心,但如果遇到问题,请记住我的警告。代码似乎没有问题。然而,我注意到每当我使用if-block语句时都会发生一些奇怪的事情,比如if-something(做一些事情..做更多事情)。我所做的是使用内联if语句,比如if exists“myFile”来做一些事情,而另一个if exists“myFile”来做其余的事情。只需尝试内联ifs,看看它是否会改变。
set "test=apples"
(
set "test=oranges"
setlocal enabledelayedexpansion
echo %test% and !test!
endlocal
)
@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
)