我想创建一个批处理文件,在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上不起作用)。
答案 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/