我正在编写一个bat脚本,用于自动创建/ 32路由到可通过LAB隧道接口访问的网络中的设备。
我必须这样做,因为必须在另一个(公司隧道)上设置LAB隧道,如果没有目的地路由,它会自动转发其中的数据包。因此,我为网络中的设备创建了所有/ 32路由,以防止转发公司隧道。
以下脚本制作技巧但由于我未知的原因,我必须先运行它3到4次才能运行。 (注意我是蝙蝠脚本的大菜鸟)
@echo off
c:
cd %systemroot%
set /P input=Please enter a LAB ID:
set /A labid=%input%
if %labid% GTR 98 (
if %labid% LSS 255 (
set "net=10.%labid%"
for /f "tokens=1-5 delims= " %%A in ('route print ^| findstr %net%') do (
echo Adding static routes for LAB %labid%...
set gatewayssl=%%C
echo Gateway is SSL interface: %gatewayssl%
for /l %%h in (1,1,254) do call :add_route %%h %gatewayssl%
goto:EOF
)
goto:EOF
)else (
echo Invalid Lab ID
goto:EOF
)
) else (
echo Invalid Lab ID
goto:EOF
)
:add_route
set ipaddr=%net%.0.%1
route add %ipaddr% mask 255.255.255.255 %2% metric 1
goto:EOF
通常,这是产生的输出:
[...]>Z:\ALU\SGCC\LAB\labrouting.bat
Please enter a LAB ID:104
FINDSTR : Ligne de commande erronée
C:\WINNT>Z:\ALU\SGCC\LAB\labrouting.bat
Please enter a LAB ID:104
Adding static routes for LAB 104...
Gateway is SSL interface:
Manipule les tables de routage du réseau.
ROUTE [-f] [-p] [cmde [destin]
[route manual apperas many times because of the for loop...]
C:\WINNT>Z:\ALU\SGCC\LAB\labrouting.bat
Please enter a LAB ID:104
Adding static routes for LAB 104...
Gateway is SSL interface: 192.168.104.1
尽可能地,在运行此脚本3次之后,它最终会起作用。 你能帮忙找出导致这个问题的原因吗?
我提前感谢您的支持。
致以最诚挚的问候,
西尔。
答案 0 :(得分:1)
这是最终的剧本(如果有人有兴趣):
@echo off
set /P input=Please enter a LAB ID:
set /A labid=%input%
if /i %labid% lss 98 (goto :eof)
if /i %labid% gtr 255 (goto :eof)
call :sub_set_net
echo Your LAB network is: %net%.0.0
call :sub_get_lab_gw
echo Your LAB gateway is: %gatewayssl%
call :sub_add_lab_routes
goto :eof
:sub_error
echo Invalid LAB id (98<labid<255)
goto :eof
:sub_set_net
set "net=10.%labid%"
goto :eof
:sub_get_lab_gw
route print | findstr %net% > %temp%\TMPROUTINGLAB.txt
for /f "tokens=1-5 delims= " %%A in (%temp%\TMPROUTINGLAB.txt) do set gatewayssl=%%C
del %temp%\TMPROUTINGLAB.txt
goto :eof
:sub_add_lab_routes
echo Adding static routes for LAB %labid%...
for /l %%h in (1,1,254) do call :sub_add_route %%h %gatewayssl%
echo Done
pause
goto :eof
:sub_add_route
set ipaddr=%net%.0.%1
route add %ipaddr% mask 255.255.255.255 %2% metric 1
goto :eof
:eof
再次感谢您的帮助!
祝你好运, 西尔
答案 1 :(得分:0)
如果您尝试以下示例,您将看到这不起作用:
@echo off
set labid=104
if %labid% GTR 98 (
if %labid% LSS 255 (
set "net=10.%labid%"
echo net=%net%
)
)
pause
%net%
没有值,或者它将具有旧值。
有关发生这种情况的详细信息,请参阅Variable Expansion in FOR Loops。
您也可以调用子路由来解决此问题,而不是使用setlocal enableextensions
:
set labid=104
if %labid% GTR 98 (
if %labid% LSS 255 (
call :setnet
)
)
pause
goto :eof
:setnet
set "net=10.%labid%"
echo net=%net%
goto :eof
:eof
如果多次运行它的原因是,set "net=10.%labid%"
之类的set命令会被执行,net会获得正确的值。当你第二次运行它时,net仍然具有上一次运行的值,因此它将在那一刻按预期工作。每次运行它时,另一个set=
将获得正确的值。