批处理脚本优化请求:按环境过滤服务器列表并调整输出格式
优化后的Batch脚本实现
@echo off setlocal enabledelayedexpansion :: 处理serial变量:默认赋值100,调用外部脚本获取实际值 set "serial=100" call "get_server_details.cmd" :: 假设该外部脚本会更新serial变量的实际值 :: 校验并解析环境参数 set "target_env=" if /i "%~1" equ "D" set "target_env=DEV" if /i "%~1" equ "U" set "target_env=UAT" if /i "%~1" equ "P" set "target_env=PROD" if /i "%~1" equ "DEV" set "target_env=DEV" if /i "%~1" equ "UAT" set "target_env=UAT" if /i "%~1" equ "PROD" set "target_env=PROD" :: 参数不合法时提示并退出 if not defined target_env ( echo 错误:请传入合法环境参数:D(DEV)/U(UAT)/P(PROD) exit /b 1 ) :: 定义各环境服务器列表(可根据实际场景替换为从外部文件/数据库读取) set "DEV_servers=dev-srv-01 dev-srv-02 dev-srv-03" set "UAT_servers=uat-srv-01 uat-srv-02" set "PROD_servers=prod-srv-01 prod-srv-02 prod-srv-03 prod-srv-04" :: 输出对应环境的服务器,每行显示一个 echo 当前Serial值:%serial% echo %target_env%环境服务器列表: for %%s in (!%target_env%_servers!) do ( echo - %%s ) endlocal
核心优化说明
- 环境过滤逻辑:仅根据传入的参数(支持缩写/完整名称)加载对应环境的服务器数据,完全隐藏其他环境内容
- 格式化输出:通过
for循环遍历服务器列表,实现每行显示一个服务器名称 - 参数校验:对非法参数直接给出错误提示并退出,避免无意义执行
- Serial变量兼容:保留默认值100的同时,通过
call命令调用外部脚本获取实际值(需确保外部脚本正确设置serial变量)
扩展适配(若服务器列表来自外部文件)
如果服务器列表不是硬编码,而是存储在每行一个服务器的文本文件中,可替换服务器定义与输出部分为以下逻辑:
:: 绑定对应环境的服务器文件 if "%target_env%" equ "DEV" set "server_file=dev_servers.txt" if "%target_env%" equ "UAT" set "server_file=uat_servers.txt" if "%target_env%" equ "PROD" set "server_file=prod_servers.txt" echo %target_env%环境服务器列表: for /f "delims=" %%s in (%server_file%) do ( echo - %%s )
内容的提问来源于stack exchange,提问作者Learning_something_new
相关产品推荐
相关产品推荐

