如何将公共 IP v4 地址放入 Windows 批处理变量(
*.bat
,*.cmd
文件)?
如果您使用网络浏览器访问此 URL
https://api.ipify.org
,您的公共 IP v4 将以纯文本形式显示。 我的目标是将此地址放入 Windows 批处理变量中。
我尝试了以下 Windows 批处理代码:
@echo off
%SystemRoot%\System32\bitsadmin.exe /transfer "Job" "https://api.ipify.org" "%TEMP%\ipify.org" >nul
for /f %%i in (%TEMP%\ipify.org) do (set "res=%%i")
echo My public IP address is: %res%
上面的代码构成了一个最小的可重现示例。
此批处理代码不接受任何输入参数。
此批处理代码生成以下输出:
The system cannot find the file C:\temp\ipify.org
My public IP address is:
上面的代码不起作用,因为它没有将公共 IP 地址获取到 Windows 批处理变量中,并且不显示它。
调试显示文件
ipify.org
未创建,因为bitsadmin
返回错误代码0x80072f7d。bitsadmin
不是强制性的。
下面是一个类似的 PowerShell 命令,显示公共 IP 地址:
$ip = Invoke-RestMethod -Uri 'https://api.ipify.org?format=json'
"My public IP address is: $($ip.ip)"
...在 Python 中:
from requests import get
ip = get('https://api.ipify.org').text
print('My public IP address is: {}'.format(ip))
上面的 PS 和 Python 代码只是所寻求功能的工作示例。 使用 PowerShell 或 Python 代码的答案将不被接受。 仅适用于所有 64 位版本 Windows 的 Windows 批处理代码,无需安装额外的 PE 文件/可执行文件。
无需在 URL 中指定格式,但我认为
https
前缀需要替换为 http
。根据您选择的操作系统中未更改的系统设置,它应该可以在没有 PowerShell 或 python 的情况下工作,或者需要包含其他/非标准可执行文件。
<!-- :
@Echo Off
SetLocal EnableExtensions
Set "PublicIP="
For /F %%G In ('%SystemRoot%\System32\cscript.exe //NoLogo "%~f0?.wsf" 2^>NUL') Do Set "%%G"
If Not Defined PublicIP GoTo :EOF
Echo Your public IP is: %PublicIP%
Pause
Exit /B
-->
<Job><Script Language="VBScript">
Set IPRequest = CreateObject("Microsoft.XMLHTTP")
Call IPRequest.Open("GET", "http://api.ipify.org", FALSE)
IPRequest.Send()
WScript.Echo("PublicIP=" & IPRequest.ResponseText)
</Script></Job>