Windows Batch如何创建包含唯一值集合的数组?
Windows Batch脚本实现数组去重(仅添加不存在的值)
要解决遍历文件时数组出现重复值的问题,我们可以利用环境变量作为哈希标记的方式,先记录已添加过的年份,仅当年份未被标记时才将其加入数组。以下是修改后的脚本:
@echo off setlocal enableDelayedExpansion set i=0 for %%f in (*00.DIF) do ( set "fname=%%~nf" set "year=!fname:~-4!" :: 检查当前年份是否未被记录 if not defined _year_!year! ( :: 标记该年份已存在 set "_year_!year!=1" :: 将年份加入数组 set "Obj[!i!].name=!year!" set /a i+=1 ) ) set "lastindex=!i!" :: 输出去重后的数组内容 if !lastindex! gtr 0 ( for /L %%f in (0,1,!lastindex!-1) do ( echo !Obj[%%f].name! ) ) else ( echo 无符合条件的文件或所有年份均重复 ) endlocal
关键逻辑说明
- 哈希标记机制:通过创建形如
_year_YYYY的动态变量(比如年份2024对应_year_2024=1),标记该年份已经被添加到数组中。 - 去重判断:
if not defined _year_!year!确保只有未被标记的年份才会执行数组添加操作,从根源避免重复。 - 修正数组遍历范围:原脚本的
lastindex是计数器最终值,数组索引从0到i-1,因此循环范围调整为0,1,!lastindex!-1,避免输出空元素。
内容的提问来源于stack exchange,提问作者DKY
相关产品推荐
相关产品推荐

