用于为特定IP地址添加静态路由的Windows脚本
我想使用脚本从命令提示符创建特定路由。 为此,我需要知道一个可以用作网关的特定地址。 我要使用此命令:用于为特定IP地址添加静态路由的Windows脚本,windows,batch-file,Windows,Batch File,我想使用脚本从命令提示符创建特定路由。 为此,我需要知道一个可以用作网关的特定地址。 我要使用此命令: arp-a | findstr/i“a.b.c.d” 输出将是: 接口:a.b.c.d---0x14 现在,我想修改这个IP(通过在最后一个八位组添加+1:so d+1),并使它成为其他IP(或子网)的默认网关 路由添加x.y.z.w网络掩码255.255.255.255网关a.b.c.d+1度量1 知道如何存储、保留初始命令的输出并修改IP地址吗 提前谢谢 setlocal enablede
arp-a | findstr/i“a.b.c.d”
输出将是:
接口:a.b.c.d---0x14
现在,我想修改这个IP(通过在最后一个八位组添加+1:so d+1),并使它成为其他IP(或子网)的默认网关
路由添加x.y.z.w网络掩码255.255.255.255网关a.b.c.d+1度量1
知道如何存储、保留初始命令的输出并修改IP地址吗
提前谢谢
setlocal enabledelayedexpansion
set ipaddr=a.b.c.d
for /f "tokens=1-4 delims=." %%a in ("%ipaddr%") do (
set /a lastoctet = %%d + 1
set "newipaddr=%%a.%%b.%%c.!lastoctet!"
)
route add x.y.z.w netmask 255.255.255.255 gateway %newipaddr% metric 1
此代码使用aFOR/F
将地址分成四个部分,然后使用SET/a
增加其中一个部分,然后重新组装地址。代码假设您已经提取了IP地址(用于示例中的findstr
命令。您可以使用另一个for/f
从arp
输出解析出IP地址
for /f "tokens=2 delims= " %%a in ('arp -a ^|findstr /i "Interface"') do set "ipaddr=%%a"
请注意,上面的代码不会进行任何错误处理。当最后一个八位字节大于254时,生成的IP地址可能无效。您应该能够在
for
块中添加一个检查来检测此情况。此代码可以提取IP地址,并执行与Ryan Bemrose发布的相同的操作。>
@echo off
for /f "delims=" %%a in ('arp -a ^|findstr /i "Interface"') do (set Data=%%a)
Call:ExtractIP "%Data%"
Echo The IP adress is : %IP%
pause
Setlocal Enabledelayedexpansion
for /f "tokens=1-4 delims=." %%a in ("%IP%") do (
set /a lastoctet = %%d + 1
set "newipaddr=%%a.%%b.%%c.!lastoctet!"
)
Echo route add x.y.z.w netmask 255.255.255.255 gateway %newipaddr% metric 1
EndLocal
pause
Exit /b
::**********************************************************************
:ExtractIP <Data>
(
echo wscript.echo ExtractIP("%~1"^)
echo Function ExtractIP(Data^)
echo Set objRegex = new RegExp
echo objRegex.Pattern = "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"
echo objRegex.Global = False
echo objRegex.IgnoreCase = True
echo Set Matches = objRegex.Execute(Data^)
echo For Each Match in Matches
echo ExtractIP = Match.Value
echo Next
echo End Function
)>"%tmp%\%~n0.vbs"
For /f "delims=" %%# in ('Cscript /nologo "%tmp%\%~n0.vbs"') do set IP=%%#
Exit /b
::**********************************************************************
可能重复:您是在询问如何从
arp-a
输出中获取IP地址,还是在获得IP地址后如何对其执行数学运算?上面的链接解释了如何执行后者。如果是前者,请说明您正在尝试执行的操作;您似乎已经拥有用于findstr
的IP地址,并且没有需要再次解析。除非您关心验证arp的输出,否则无需调用vbs文件从接口行解析IP。for/f“tokens=2 delims=“%%a in('arp-a^ findstr/i“Interface”)设置“IP=%%a”
@RyanBemrose谢谢你的评论,我根据你的评论编辑了我的答案!谢谢Ryan,但是,如果我知道它的模式,我如何从输出中只提取IP地址?例如,我知道它将以固定的:a.b.c但动态的d(a.b.c.d)开头。有什么方法可以从输出中提取出来吗?@alexsnemos编辑后添加到。
@echo off
for /f "tokens=2 delims= " %%a in ('arp -a ^|findstr /i "Interface"') do (set IP=%%a)
Echo The IP adress is : %IP%
pause
Setlocal Enabledelayedexpansion
for /f "tokens=1-4 delims=." %%a in ("%IP%") do (
set /a lastoctet = %%d + 1
set "newipaddr=%%a.%%b.%%c.!lastoctet!"
)
Echo route add x.y.z.w netmask 255.255.255.255 gateway %newipaddr% metric 1
EndLocal
pause
Exit /b