原因:想写一个批量加静态路由的 bat 脚本,适用于不同网段的终端快速配置双网卡上网。
过程:由于是第一次写,也不知道怎么在网上找只能用 gpt3.5 艰难的生成好了所有功能,但是太长了,问了同事 可以用变量缩短,又是一个上午过去了 gpt 被玩坏了发一句抱歉一句然后瞎扯。
route add -p "A" mask 255.255.255.0 "B" 结果:目前是删除路由的那段脚本好了,添加脚本提示一堆看着像不合规的命令输出,这段要实现的是在"A"变量 组里面循环一次,"B"里的下一跳路由用户输入的序号提供,由于用户直接输入的是网段还需要再改写成网关 才行,下面是代码,希望有大佬给指点下,万分感谢:
@echo off
PUSHD %~DP0
TITLE 双网卡配置脚本
mode con cols=60 lines=32
color 3e
:menu
cls
echo.
echo. 请选择内网网段
echo ---------------------------
echo.
echo 0 10.10.6.0
echo 1 10.10.7.0
echo 2 10.10.8.0
echo 3 10.10.9.0
echo 4 10.10.10.0
echo 5 10.10.11.0
echo 6 10.10.12.0
echo 7 10.10.13.0
echo 8 10.10.14.0
echo 9 192.168.200.0
echo 10 192.168.22.0
echo 11 192.168.201.0
echo.
echo.
echo q 退出
echo.
echo d 删除路由表
echo.
echo ---------------------------
echo.
echo. 请输入序号:
set /p ID=
if "%ID%"=="q" (
goto :eof
)
if "%ID%"=="d" (
goto delete_routes
)
if %ID% LSS 0 (
goto menu
)
setlocal enabledelayedexpansion
set "routes=10.10.6.0 10.10.7.0 10.10.8.0 10.10.9.0 10.10.10.0 10.10.11.0 10.10.12.0 10.10.13.0 10.10.14.0 192.168.200.0 192.168.22.0 192.168.201.0"
set "gateways=10.10.6.1 10.10.7.1 10.10.8.1 10.10.9.1 10.10.10.1 10.10.11.1 10.10.12.1 10.10.13.1 10.10.14.1 192.168.200.1 192.168.22.1 192.168.201.1"
for /L %%i in (0,1,11) do (
if "!ID!"=="%%i" (
set "gw=!gateways%%i!"
for %%a in (!routes!) do (
route add -p %%a mask 255.255.255.0 !gw!
echo 已添加路由: %%a !gw!
)
)
)
echo. 添加完成
timeout /t 50 >nul
goto menu
:delete_routes
set "routes=10.10.6.0 10.10.7.0 10.10.8.0 10.10.9.0 10.10.10.0 10.10.11.0 10.10.12.0 10.10.13.0 10.10.14.0 192.168.200.0 192.168.22.0 192.168.201.0"
for %%r in (%routes%) do (
route delete %%r
echo 已删除路由: %%r
)
timeout /t 1 >nul
echo. 删除完成
goto :menu
1
word2064128279 OP 不加变量等有 400 行,想学习下缩短,或者大佬们如果有更好 1 方法或者要如何改写哪里有问题劳烦指点一二
|
2
fuzzsh 324 天前
双网卡
又这么多的 gateway? :nic1 set list=10.10.6.0 10.10.7.0 10.10.8.0 10.10.9.0 10.10.10.0 10.10.11.0 10.10.12.0 10.10.13.0 10.10.14.0 (for %%a in (%list%) do ( route add %%a mask 255.255.255.0 1.2.3.4 )) :nic2 set list=192.168.200.0 192.168.22.0 192.168.201.0 (for %%a in (%list%) do ( route add %%a mask 255.255.255.0 5.6.7.8 )) |
3
Puteulanus 324 天前
要不试试让它用 powershell 写,应该比 bat 好使一些
|
4
word2064128279 OP @fuzzsh 有的老哥,只用批量添加路由上去就行了,这两段代码好像不是。是要对用户输入的网段该写成网关再进行路由的添加
|
5
word2064128279 OP @Puteulanus 好的,我试试
|
6
xxbdh 323 天前
根据你的描述,按照自己的理解,简单做了修改和简化。
@echo off & setlocal enabledelayedexpansion PUSHD %~DP0 TITLE 双网卡配置脚本 mode con cols=60 lines=32 color 3e set "routes=10.10.6.0 10.10.7.0 10.10.8.0 10.10.9.0 10.10.10.0 10.10.11.0 10.10.12.0 10.10.13.0 10.10.14.0 192.168.200.0 192.168.22.0 192.168.201.0" :menu cls echo. echo. 请选择所处内网网段 echo --------------------------- echo. set _id= for %%s in (%routes%) do ( set /a _id+=1 echo !_id! %%s set _route=%%s set gateway#!_id!=!_route:~0,-2!.1 ) echo. echo. echo q 退出 echo. echo d 删除路由表 echo. echo --------------------------- echo. set /p ID= 请输入序号: if /i "%ID%"=="q" goto :eof if /i "%ID%"=="d" goto delete_routes if not defined gateway#%ID% goto menu :add_routes for %%a in (%routes%) do ( route -p add %%a mask 255.255.255.0 !gateway#%ID%! echo 已添加路由: %%a !gateway#%ID%! ) echo. 添加完成 timeout /t 50 >nul goto menu :delete_routes for %%r in (%routes%) do ( route delete %%r echo 已删除路由: %%r ) echo. 删除完成 timeout /t 1 >nul goto :menu |
7
word2064128279 OP @xxbdh 可以了,谢谢大佬。我照着学习下
|