Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于为特定IP地址添加静态路由的Windows脚本_Windows_Batch File - Fatal编程技术网

用于为特定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
此代码使用a
FOR/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