使用命令将刚刚写入的文件的第一行读入变量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 和 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
,子例程中的 计算结果为没有前导空格的地址。