原因:想写一个批量加静态路由的 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 canitnamechange OP 不加变量等有 400 行,想学习下缩短,或者大佬们如果有更好 1 方法或者要如何改写哪里有问题劳烦指点一二 |
2 pingdog 2023-12-26 13:58:09 +08:00 双网卡 又这么多的 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 2023-12-26 14:09:00 +08:00 要不试试让它用 powershell 写,应该比 bat 好使一些 |
4 canitnamechange OP @fuzzsh 有的老哥,只用批量添加路由上去就行了,这两段代码好像不是。是要对用户输入的网段该写成网关再进行路由的添加 |
5 canitnamechange OP @Puteulanus 好的,我试试 |
6 xxbdh 2023-12-27 08:01:01 +08:00 根据你的描述,按照自己的理解,简单做了修改和简化。 @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 canitnamechange OP @xxbdh 可以了,谢谢大佬。我照着学习下 |