使用批处理文件将本地IP地址写入文本文件

时间:2012-12-13 09:08:06

标签: batch-file command cmd ip

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

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 个答案:

答案 0 :(得分:6)

使用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循环允许您逐行处理文本(文件或字符串文字),根据指定的分隔符将每行拆分为字段(或标记)(s )。您可以在内置帮助(FOR /?)中阅读有关此命令的更多信息。我只会补充一点,在这种情况下,处理过的部分是字符串文字(值first_ip),分隔符设置为:,循环变量(%%I)接收2 nd 令牌,这是一个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计算到地址,而不用前导空格。

答案 1 :(得分:6)

for /f "tokens=2 delims=:" %%a in ('ipconfig^|find "IPv4 Address"') do (
set ip=%%a
goto :BREAK
)

:BREAK
echo %ip: =% >ip.txt

答案 2 :(得分:0)

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

powershell.exe -c "gwmi Win32_NetworkAdapterConfiguration | ? { $_.IPAddress -ne $null } | % {$_.ipaddress[0]}"

答案 3 :(得分:0)

您可以使用autohotkey。

对于消息框,

msgbox, %A_ipAddress%  

或者如果你想在文本文件User

Fileappend, %A_ipaddress%. Ip.txt

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