如何扩展现有Batch脚本实现多TXT关联数据合并到CSV
批处理脚本完善:多TXT文件合并为关联CSV
用户有四个TXT文件:TestEmployees.txt(存储Name)、TestSign.txt(存储Name与Sign的对应关系)、RoomNumber.txt(存储Sign与RoomNumber的对应关系)、PhoneNumber.txt(存储Sign与PhoneNumber的对应关系),需要将这些数据合并为一个CSV文件,列标题为Name;Sign;RoomNumber;PhoneNumber,关联规则为:Name对应Sign,Sign对应RoomNumber和PhoneNumber。现有脚本仅能生成前两列,以下是完善后的代码:
@echo off setlocal enabledelayedexpansion :: 初始化CSV文件,写入列标题 echo Name;Sign;RoomNumber;PhoneNumber > sorted.csv :: 遍历TestEmployees.txt中的Name(取第二列) for /f "tokens=2 delims= " %%x in (TestEmployees.txt) do ( call :findSignAndDetails "%%x" ) endlocal exit /b :findSignAndDetails set "name=%~1" set "sign=" set "room=" set "phone=" :: 从TestSign.txt中匹配Name对应的Sign for /f "tokens=1,2 delims= " %%a in (TestSign.txt) do ( if "!name!"=="%%a" ( set "sign=%%b" goto :findRoomPhone :: 找到Sign后直接跳去匹配房间和电话 ) ) :findRoomPhone :: 从RoomNumber.txt中匹配Sign对应的RoomNumber if not "!sign!"=="" ( for /f "tokens=1,2 delims= " %%c in (RoomNumber.txt) do ( if "!sign!"=="%%c" ( set "room=%%d" goto :findPhone :: 找到房间后跳去匹配电话 ) ) ) :findPhone :: 从PhoneNumber.txt中匹配Sign对应的PhoneNumber if not "!sign!"=="" ( for /f "tokens=1,2 delims= " %%e in (PhoneNumber.txt) do ( if "!sign!"=="%%e" ( set "phone=%%f" goto :outputLine :: 找到电话后跳去输出行 ) ) ) :outputLine :: 输出一行数据,未找到的字段留空 echo !name!;!sign!;!room!;!phone! >> sorted.csv :: 结束子程序,返回主循环 goto :eof
关键修改说明
- 启用延迟变量扩展:通过
setlocal enabledelayedexpansion解决循环内变量更新无法实时读取的问题 - 整合匹配逻辑:将Sign、RoomNumber、PhoneNumber的匹配流程整合到一个子程序中,避免代码冗余
- 优化匹配效率:找到对应值后立即用
goto跳出循环,无需遍历整个文件 - 空值处理:初始化变量为空,确保未找到对应数据时,CSV对应列留空,保证格式正确
内容的提问来源于stack exchange,提问作者geko
相关产品推荐
相关产品推荐

