You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写Batch脚本解析文本文件生成指定数组与键值对

批量脚本解析含数组项与普通键值对的文本文件

之前我们用这个脚本解析单键值对的keys.txt:

@echo off
setlocal

for /f "usebackq tokens=1* delims==" %%I in ("keys.txt") do (
    set "%%~I=%%~J"
)

set key

但现在需要处理包含重复键数组项(files、folders、sources)和普通键值对的文本文件,示例内容如下:

;files array
files=filename1
files=filename2
...
files=filename_n
;folders array 
folders=foldername1
folders=foldername2
... 
folders=foldername_n
;sources array 
sources=value1
sources=value2
...
sources=value_n
;other key value pairs
do_copy=yes
messagePromot=Are you sure?

要求把重复键转换成带索引的数组变量(比如files[0]=filename1),同时保留普通键值对,对应的批量脚本如下:

@echo off
setlocal enabledelayedexpansion

:: 初始化数组计数器,对应三个指定数组键
set "files_count=0"
set "folders_count=0"
set "sources_count=0"

:: 遍历配置文件,跳过空行和以;开头的注释行
for /f "usebackq tokens=1* delims== eol=;" %%I in ("config.txt") do (
    :: 判断当前键是否为数组键,生成带索引的数组变量
    if "%%I"=="files" (
        set "files[!files_count!]=%%~J"
        set /a files_count+=1
    ) else if "%%I"=="folders" (
        set "folders[!folders_count!]=%%~J"
        set /a folders_count+=1
    ) else if "%%I"=="sources" (
        set "sources[!sources_count!]=%%~J"
        set /a sources_count+=1
    ) else (
        :: 普通键值对直接设置变量
        set "%%~I=%%~J"
    )
)

:: 输出所有变量验证结果
echo --- 数组变量 ---
set files[
set folders[
set sources[
echo --- 普通变量 ---
set do_copy
set messagePromot

endlocal

关键说明:

  • 启用enabledelayedexpansion:循环中动态更新计数器和数组变量时,延迟扩展能让变量在执行阶段实时取值,避免语法错误。
  • 过滤无效行:eol=;会自动跳过以;开头的注释行,确保只处理有效键值对。
  • 数组索引管理:每个数组键对应独立计数器,每次匹配到相同键时,用当前计数器值作为索引赋值,随后计数器自增,实现有序数组。
  • 普通键兼容:非指定数组的键值对直接沿用原有逻辑设置变量,不影响原有功能。

内容的提问来源于stack exchange,提问作者tarekahf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:17:41