有个脚本代码的问题

148 天前
 word2064128279

原因:想写一个批量加静态路由的 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
653 次点击
所在节点   Bash
7 条回复
word2064128279
148 天前
不加变量等有 400 行,想学习下缩短,或者大佬们如果有更好 1 方法或者要如何改写哪里有问题劳烦指点一二
fuzzsh
148 天前
双网卡
又这么多的 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
))
Puteulanus
148 天前
要不试试让它用 powershell 写,应该比 bat 好使一些
word2064128279
148 天前
@fuzzsh 有的老哥,只用批量添加路由上去就行了,这两段代码好像不是。是要对用户输入的网段该写成网关再进行路由的添加
word2064128279
148 天前
@Puteulanus 好的,我试试
xxbdh
147 天前
根据你的描述,按照自己的理解,简单做了修改和简化。

@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
word2064128279
146 天前
@xxbdh 可以了,谢谢大佬。我照着学习下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1003485

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX