将文本文件中的特定行读取到批处理文件中的变量

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= 将代码添加到 OP 中以便更好地查看。不断收到“发生意外错误” @user2997654 将set /p xprvar= &lt;xprtest.txt 替换为set /p xprvar=%i @user2997654 BTW:对问题进行重大修改并不好,尤其是不要复制部分答案。为什么?因为现在看起来我给出的答案比问题更糟糕,所以我有被否决的风险。

以上是关于将文本文件中的特定行读取到批处理文件中的变量的主要内容,如果未能解决你的问题,请参考以下文章

将txt文件中的行批量读取到变量中

批处理将文本中的变量名替换为变量值并删除定义赋值语句

将变量内容回显到文本文件中的批处理脚本[重复]

用于创建文件、将变量放入其中以及从中读取变量的批处理语法[重复]

使用 VB.Net 2 读取和写入文本文件中的特定行

批处理脚本读取一个列表并为每个分配一个变量