在批处理文件中读取文本文件中的特定行并将其赋值给变量

10

在我试图编写的批处理文件中,我需要将一个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%
2个回答

14

如果你想要特定的第5行:

set "xprvar="
for /F "skip=4 delims=" %%i in (xprtest.txt) do if not defined xprvar set "xprvar=%%i"
OR
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"

这很有用,谢谢。但是为了让它起作用,我不得不在文件名前面添加类型。例如:'type xprtest.txt' - Dale C
@Magoo,我在尝试从文件中取第三行,但它始终无法获取,并不确定错在哪里?set "xprvar=" for /F "skip=3 delims=" %%i in ("Z:\my folder\displayname.txt") do if not defined xprvar set "xprvar=%%i" - Tak
@tak 你应该提出自己的问题。你没有说明 xprvar 被赋予了什么值 - 我建议它是文件第4行的值。注意,这里的 OP 正在询问第 5 行,因此 skip 值为 4。因此,由于你想要第 3 行,将 skip 值分配为 2,而不是 3 - Magoo
“if not defined” 部分对于具有尾随换行符的输出至关重要。谢谢! - tresf

6

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= <xprtest.txt pause echo %xprvar% - user2997654
将代码添加到原帖中以便更好地查看。不断出现“发生了意外错误”。 - user2997654
请将set /p xprvar= <xprtest.txt替换为set /p xprvar=%i - Thomas Weller
2
@user2997654 顺便说一下:对问题进行重大编辑并不好,尤其是不要复制答案的部分。为什么呢?因为现在看起来像是我给出的答案比问题更差,所以我有被踩的风险。 - Thomas Weller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接