我有一个奇怪的问题,不确定它是否可行.
我想写一个脚本,例如我将使用ipconfig作为我的命令.
现在,当你正常运行这个命令时,输出量很大.
我想要的是一个只显示IP地址的脚本.
echo Network Connection Test
ipconfig <---This would run in the background
echo Your IP Address is: (INSERT IP ADDRESS HERE)
Run Code Online (Sandbox Code Playgroud)
输出将是
Network Connection Test
Your IP Address is: 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?
Fab*_*tti 50
以下代码适用于自Windows XP以来任何平台的任何区域设置,它从您的网卡(或多或少)随机查找网络IP.它永远不会超过几毫秒.
for /f "delims=[] tokens=2" %%a in ('ping -4 -n 1 %ComputerName% ^| findstr [') do set NetworkIP=%%a
echo Network IP: %NetworkIP%
Run Code Online (Sandbox Code Playgroud)
下面的代码将查找您的公共IP,并适用于Windows 7和更新的计算机.
for /f %%a in ('powershell Invoke-RestMethod api.ipify.org') do set PublicIP=%%a
echo Public IP: %PublicIP%
Run Code Online (Sandbox Code Playgroud)
您可以在我的博客上找到这些命令的详细说明.
mou*_*sio 40
这将在以下输出中打印IP地址ipconfig:
@echo off
set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
echo Network Connection Test
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do echo Your IP Address is: %%f
Run Code Online (Sandbox Code Playgroud)
要仅打印第一个IP地址,只需在回显后添加goto :eof(或跳转到其他标签而不是:eof),或以更易读的形式:
set ip_address_string="IPv4 Address"
rem Uncomment the following line when using older versions of Windows without IPv6 support (by removing "rem")
rem set ip_address_string="IP Address"
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
echo Your IP Address is: %%f
goto :eof
)
Run Code Online (Sandbox Code Playgroud)
一种更可配置的方法是实际解析ipconfig /all一点输出,这样你甚至可以指定你想要的IP地址的适配器:
@echo off
setlocal enabledelayedexpansion
::just a sample adapter here:
set "adapter=Ethernet adapter VirtualBox Host-Only Network"
set adapterfound=false
echo Network Connection Test
for /f "usebackq tokens=1-2 delims=:" %%f in (`ipconfig /all`) do (
set "item=%%f"
if /i "!item!"=="!adapter!" (
set adapterfound=true
) else if not "!item!"=="!item:IP Address=!" if "!adapterfound!"=="true" (
echo Your IP Address is: %%g
set adapterfound=false
)
)
Run Code Online (Sandbox Code Playgroud)
小智 17
在Windows 7中:
for /f "tokens=1-2 delims=:" %%a in ('ipconfig^|find "IPv4"') do set ip=%%b
set ip=%ip:~1%
echo %ip%
pause
Run Code Online (Sandbox Code Playgroud)
ind*_*div 13
单独提取地址有点困难,但您可以轻松获得整个IP地址行.
要在任何英语Windows操作系统上显示所有IP地址:
ipconfig | findstr /R /C:"IP.* Address"
Run Code Online (Sandbox Code Playgroud)
要在Windows 7+上仅显示IPv4或IPv6地址:
ipconfig | findstr /R /C:"IPv4 Address"
ipconfig | findstr /R /C:"IPv6 Address"
Run Code Online (Sandbox Code Playgroud)
以下是带有3个网络适配器的XP机器的一些示例输出.
IP Address. . . . . . . . . . . . : 192.168.1.10
IP Address. . . . . . . . . . . . : 10.6.102.205
IP Address. . . . . . . . . . . . : 192.168.56.1
Run Code Online (Sandbox Code Playgroud)
小智 12
@echo off
FOR /F "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i
echo Your IP Address is: %localIp%
Run Code Online (Sandbox Code Playgroud)
我无法在我的用例中使用上述任何答案,所以我使用以下命令来获取我的以太网网络适配器的 ip 地址,并如上述问题中所述回显它。
在命令行中:
for /f "tokens=3 delims=: " %i in ('netsh interface ip show config name^="Ethernet" ^| findstr "IP Address"') do echo Your IP Address is: %i
Run Code Online (Sandbox Code Playgroud)
或者在批处理文件中:
for /f "tokens=3 delims=: " %%i in ('netsh interface ip show config name^="Wi-Fi" ^| findstr "IP Address" ^| findstr [0-9]') do set IP=%%i
Run Code Online (Sandbox Code Playgroud)
ipconfig例如,使用的大多数命令只是打印出您所有的 IP 地址,而我需要一个特定的地址,在我的情况下是用于我的以太网网络适配器。
您可以使用该netsh interface ipv4 show interfaces命令查看网络适配器列表。大多数人需要 Wi-Fi 或以太网。
您将在命令提示符的输出中看到这样的表:
Idx Met MTU State Name
--- ---------- ---------- ------------ ---------------------------
1 75 4294967295 connected Loopback Pseudo-Interface 1
15 25 1500 connected Ethernet
17 5000 1500 connected vEthernet (Default Switch)
32 15 1500 connected vEthernet (DockerNAT)
Run Code Online (Sandbox Code Playgroud)
在名称列中,您应该找到所需的网络适配器(即以太网、Wi-Fi 等)。
如前所述,我对Ethernet我的案例很感兴趣。
要获取该适配器的 IP,我们可以使用 netsh 命令:
netsh interface ip show config name="Ethernet"
这给了我们这个输出:
Configuration for interface "Ethernet"
DHCP enabled: Yes
IP Address: 169.252.27.59
Subnet Prefix: 169.252.0.0/16 (mask 255.255.0.0)
InterfaceMetric: 25
DNS servers configured through DHCP: None
Register with which suffix: Primary only
WINS servers configured through DHCP: None
Run Code Online (Sandbox Code Playgroud)
(出于安全原因,我伪造了上面的实际 IP 号码)
我可以使用findstrms-dos 命令提示符中的命令进一步指定我想要的行。这里我想要包含字符串的行IP Address。
netsh interface ip show config name="Ethernet" | findstr "IP Address"
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出:
netsh interface ip show config name="Ethernet" | findstr "IP Address"
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用for允许我解析文件(或本例中的多行字符串)的命令,并根据分隔符和我感兴趣的项目编号拆分字符串的内容。
请注意,我正在寻找第三个项目 (tokens=3),并且我正在使用空格字符:作为我的分隔符 ( delims=: )。
IP Address: 169.252.27.59
Run Code Online (Sandbox Code Playgroud)
循环中的每个值或标记都作为变量 %i 打印出来,但我只对第三个“标记”或项目感兴趣(因此tokens=3)。请注意,我必须逃脱|并=使用^
在for命令的末尾,您可以指定要使用返回的内容运行的命令。在这种情况下,我使用echo其他一些文本将其打印出来,但您也可以将值分配给环境变量,do set IP=%i例如或您喜欢的任何内容。
很整洁吧?
如果您有任何改进的想法,请发表评论。我很想听听:) 或者你可以编辑。
即使您有虚拟网络适配器或 VPN 连接,这也能正常工作:
FOR /F "tokens=4 delims= " %%i in ('route print ^| find " 0.0.0.0"') do set localIp=%%i
echo Your IP Address is: %localIp%
Run Code Online (Sandbox Code Playgroud)