将文本文件中的特定行读取到批处理文件中的变量
Posted
技术标签:
【中文标题】将文本文件中的特定行读取到批处理文件中的变量【英文标题】:Reading a specific line in a text file to a variable in a batch file 【发布时间】:2014-04-14 00:01:08 【问题描述】:在我尝试编写的一个批处理文件中,我需要将 5 行文本文件中的最后一行读入一个变量。我想到这样做的一种方法可能是让放入文本文件的每一行覆盖前一行(因为文件创建和行都是由命令创建的,特别是 slmgr /xpr)但我不知道如何做这个。感谢您提出任何建议或替代方法!
cscript %windir%\system32\slmgr.vbs /xpr > xprtest.txt
pause
for /F "skip=4 delims=" %i in (xprtest.txt) set /p xprvar= <xprtest.txt
pause
echo %xprvar%
【问题讨论】:
【参考方案1】:如果你特别想要第 5 行:
set "xprvar="
for /F "skip=4 delims=" %%i in (xprtest.txt) do if not defined xprvar set "xprvar=%%i"
或
for /F "skip=4 delims=" %%i in (xprtest.txt) do set "xprvar=%%i"&goto nextline
:nextline
如果你想要最后一行而不考虑行数:
for /F "delims=" %%i in (xprtest.txt) do set "xprvar=%%i"
【讨论】:
这很有用,谢谢。但是我必须在文件名前面添加类型才能工作。例如'输入 xprtest.txt' @Magoo 我正在尝试这样做以获取文件中的第三行,但它永远不会得到它不确定是什么问题?set "xprvar="
for /F "skip=3 delims=" %%i in ("Z:\my folder\displayname.txt") do if not defined xprvar set "xprvar=%%i"
@tak 你应该提出你自己的问题。您没有说明 what 值分配给xprvar
- 我建议它是文件第 4 行的值。请注意,此处的 OP 要求输入行 5
,因此 skip
的值为 4
。因此,既然您想要行3
,请将2
,而不是3
分配为skip
值。【参考方案2】:
for
命令现在非常强大:
for /F "skip=4 delims=" %i in (test.txt) do echo %i
跳过前 4 行,有效地离开第 5 行。没有分隔符,因此您可以获得完整的行,而不仅仅是该行的第一个标记。
将echo %i
替换为您想要对第 5 行执行的任何操作。
【讨论】:
这是对我正在尝试做的事情的测试。该命令将 5 行吐出到一个文本文件中,然后如果一切正常,则将最后一行放入变量中? cscript %windir%\system32\slmgr.vbs /xpr > xprtest.txt pause for /F "skip=4 delims=" %i in (xprtest.txt) set /p xprvar=set /p xprvar= <xprtest.txt
替换为set /p xprvar=%i
@user2997654 BTW:对问题进行重大修改并不好,尤其是不要复制部分答案。为什么?因为现在看起来我给出的答案比问题更糟糕,所以我有被否决的风险。以上是关于将文本文件中的特定行读取到批处理文件中的变量的主要内容,如果未能解决你的问题,请参考以下文章