我想使用脚本从命令提示符创建特定路由。 为此,我需要知道一个可以用作网关的特定地址。 我想使用这个命令:
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地址?
提前致谢
答案 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