批处理(batch)文本写入:如何为库存结构文本修改键值
批处理实现类JSON库存字段修改的方案
实现核心逻辑
你当前存储的是扁平结构的单行类JSON文本(无嵌套、键值对以逗号分隔、末尾带冗余逗号),批处理无直接修改文件片段的能力,统一遵循「读取全量文件内容→逐段匹配目标字段→替换对应值→全量重写覆盖文件」的路径即可,全程不会破坏你原有的存储格式。
这里特意规避了批处理字符串替换通配符的贪婪匹配问题,和你已有的读取逻辑完全适配,多字段场景下不会误改其他库存项。
可直接运行的实现代码
@echo off setlocal enabledelayedexpansion chcp 65001 >nul :: 配置需要修改的目标键名、对应的新值 set "target_key=sword" set "new_value=old sword" :: 读取eq.txt的完整内容 set "raw_content=" for /f "delims=" %%a in (eq.txt) do set "raw_content=%%a" :: 去掉前后的大括号,方便拆分独立键值对 set "raw_content=!raw_content:~1,-1!" set "new_content={" :: 逐段拆分每个键值对(和你原有读取逻辑的拆分规则一致,按逗号/空格拆分) for %%b in (!raw_content!) do ( :: 跳过末尾冗余逗号拆分出的空分段 if not "%%b"=="" ( :: 检查当前分段是否为目标字段 echo %%b | findstr /c:"^"!target_key!^":" >nul if !errorlevel! equ 0 ( :: 命中目标字段,替换为新值的键值对格式 set "new_content=!new_content!^"!target_key!^":"!new_value!^"," ) else ( :: 非目标字段,保留原内容 set "new_content=!new_content!%%b," ) ) ) :: 覆盖写回修改后的内容到eq.txt echo !new_content!>eq.txt echo 字段修改完成,当前文件内容:!new_content!
效果验证
- 初始
eq.txt内容:{"sword":"",} - 运行代码后自动替换为:
{"sword":"old sword",} - 多字段场景下兼容:如果原文件为
{"sword":"","shield":"wood","gold":"100",},修改sword字段后会保留其他所有项,输出为{"sword":"old sword","shield":"wood","gold":"100",}
注意事项
- 该方案仅适配你当前的极简扁平类JSON结构,如果后续需要支持嵌套JSON、多行存储格式,建议改用PowerShell处理标准JSON格式
- 代码开头的
chcp 65001用于统一UTF-8编码,避免中文库存名写入时出现乱码 - 如果新值包含逗号、空格等特殊字符,直接在
new_value变量的引号内填写即可,不会影响拆分逻辑
内容的提问来源于stack exchange,提问作者Skrampy
相关产品推荐
相关产品推荐

