用于为特定IP地址添加静态路由的Windows脚本

时间:2016-04-14 15:12:29

标签: windows batch-file

我想使用脚本从命令提示符创建特定路由。 为此,我需要知道一个可以用作网关的特定地址。 我想使用这个命令:

SELECT t1.SettingID, COALESCE(t2.Value, t1.Default) FROM ...

输出将是:

arp -a | findstr /i "a.b.c.d"

现在,我想修改此IP(通过在最后一个八位字节添加+1:所以d + 1)并使其成为其他IP(或子网)的默认网关

Interface: a.b.c.d --- 0x14

我知道如何存储保留初始命令的输出,并修改IP地址?

提前致谢

2 个答案:

答案 0 :(得分:1)

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

此代码使用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块内添加一个检查来检测这种情况。

答案 1 :(得分:0)

此代码可以提取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
::**********************************************************************

编辑: 或更简单的Ryan Bemrose在评论中发布了提取IP地址:

@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