7

我想创建一个将本地 IP 地址写入 txt 文件的批处理文件。当我使用此代码运行批处理文件时(文件路径错误,但这不是问题):

ipconfig | find "IP Address" > \File.txt

我得到了整个 Windows IP 配置(我用 xxx 更改了一些数字和内容以不显示所有信息)

    IP Address. . . . . . . . . . . . : 100.100.100.223

    IP Address. . . . . . . . . . . . : 192.xxx.xxx.xxx

我只想写入文件100.100.100.223

我是批处理文件的新手,我真的搜索了很多,我真的很困惑。(也许我用错误的关键字搜索)。

忘了告诉我正在使用 Windows XP(因为某些答案在 XP 上不起作用)。

4

4 回答 4

7

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

于 2012-12-13T09:36:48.350 回答
7
for /f "tokens=2 delims=:" %%a in ('ipconfig^|find "IPv4 Address"') do (
set ip=%%a
goto :BREAK
)

:BREAK
echo %ip: =% >ip.txt
于 2012-12-13T11:48:50.727 回答
0

如果你对 powershell 没问题,试试这个:

powershell.exe -c "gwmi Win32_NetworkAdapterConfiguration | ? { $_.IPAddress -ne $null } | % {$_.ipaddress[0]}"
于 2012-12-13T09:13:46.897 回答
0

您可以使用自动热键。

对于消息框,

msgbox, %A_ipAddress%  

或者如果你想在文本文件中用户

Fileappend, %A_ipaddress%. Ip.txt

有用的链接。https://autohotkey.com/board/topic/45109-how-to-get-my-ip-address/

于 2016-06-10T07:59:50.830 回答