批处理脚本优化:批量检索TXT文件中Region-Color编号并修改对应变量颜色
优化批处理脚本:批量处理Region与颜色编号的匹配
嘿,我懂你现在的困扰——手动给每一组Region和颜色编号写单独的检索代码,不仅工作量大,还容易出错。其实我们可以用批量循环+正则匹配的思路来彻底简化整个流程,让代码更简洁易维护!
核心优化思路
- 批量初始化颜色变量:用for循环一次性把所有
SAAC1到SAAC100、SAAC201到SAAC226初始化为红色(默认状态),不用逐行写Set语句。 - 一次性提取所有目标条目:用
findstr结合正则表达式,从Colors.txt中提取所有符合Region[1-6]=[数字]格式的条目,然后批量处理每个条目,把对应的颜色变量改成绿色。 - 统一输出结果:最后还是按你的需求输出所有色块和说明,但前面的准备工作已经自动化完成了。
优化后的完整代码
@Echo off chcp 65001 >nul :: ============================================== :: 1. 批量初始化所有SAAC变量为红色(默认未匹配状态) :: ============================================== :: 处理1-100的颜色编号 for /L %%n in (1,1,100) do set "SAAC%%n=[40;31m" :: 处理201-226的颜色编号 for /L %%n in (201,1,226) do set "SAAC%%n=[40;31m" :: ============================================== :: 2. 批量检索并修改匹配到的颜色变量 :: ============================================== :: 从Colors.txt中提取所有Region[1-6]=[数字]的条目 for /F "tokens=1,2 delims==" %%a in ('findstr /I /R "Region[1-6]=[0-9][0-9]*" "%appdata%\Batch\Colors.txt"') do ( set "colorNum=%%b" :: 启用延迟变量扩展,处理循环内的变量判断 setlocal enabledelayedexpansion :: 检查颜色编号是否在目标范围内,是则改为绿色 if !colorNum! geq 1 if !colorNum! leq 100 set "SAAC!colorNum!=[40;32m" if !colorNum! geq 201 if !colorNum! leq 226 set "SAAC!colorNum!=[40;32m" endlocal ) :: ============================================== :: 3. 输出所有色块和说明(和你原来的逻辑一致) :: ============================================== cls Echo %SAAC1%██[40;37m 1 Red Echo. Echo %SAAC2%██[40;37m 2 Blue Echo. Echo %SAAC3%██[40;37m 3 Green Echo. Echo %SAAC4%██[40;37m 4 Yellow Echo. :: ...... 这里继续补充你需要的其他颜色说明 Echo %SAAC226%██[40;37m 226 Slate Dye¹
关键部分说明
- 批量初始化:
for /L %%n in (起始,步长,结束)是批处理里的数字循环,能快速生成1-100和201-226的所有编号,自动设置对应的SAAC变量。 - 正则匹配:
findstr /R "Region[1-6]=[0-9][0-9]*"用来匹配所有Region1到Region6的条目,确保只处理我们关心的内容。 - 延迟变量扩展:因为在
for循环里,直接用%colorNum%会提前替换成循环前的空值,所以需要setlocal enabledelayedexpansion,用!colorNum!来获取循环中的实时变量值。
这样修改后,不管你要处理多少组Region和颜色编号,代码都不用大幅改动,只需要调整循环范围和输出部分的说明即可!
内容的提问来源于stack exchange,提问作者PurplePanic
相关产品推荐
相关产品推荐

