使用 SET /P
命令将刚写入的文件的第一行读入变量中,然后使用 ECHO
命令覆盖该文件:
ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
ECHO %first_ip%> \File.txt
更新(回答评论):
要仅提取IP地址,您可以使用类似于以下方式的FOR /F
循环:
ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO (
ECHO %%I> \File.txt
)
一个
FOR /F
循环允许您逐行处理文本(文件或字符串),根据指定的分隔符将每行分割为字段(或
标记)。您可以在内置帮助 (
FOR /?
) 中了解更多关于此命令的信息。我只想补充说,在这种情况下,处理的部分是一个字符串(
first_ip
的值),分隔符设置为
:
,循环变量 (
%% I
) 接收第二个标记,即 IP 地址。
请注意,:
和 IP 之间的空格被保留,即它成为标记的一部分 ( 100.100.100.223
),因此也会写入文件。如果您对此不太满意,可以使用子程序来去掉空格,例如:
ipconfig | find "IP Address" > \File.txt
< \File.txt SET /P first_ip=
FOR /F "delims=: tokens=2" %%I IN ("%first_ip%") DO (
CALL :MyEcho %%I
)
:: the following command is there merely to
:: avoid running (into) the subroutine again
GOTO :EOF
:MyEcho
ECHO %1> \File.txt
当子程序被调用时(
CALL :MyEcho %%I
),参数会带有前置空格一起传递。但是在处理子程序的命令行时,该空格不再被视为值的一部分,因为参数没有被引用,所以解析器只会看到一个用两个空格分隔的参数与名称。因此,子程序中的
%1
将计算为不带前导空格的地址。