Bat-KV: 适用于Windows批处理(.bat)的超轻量级KV数据库

44 阅读2分钟

Windows批处理的上古语法相当难用。尤其是当要持久化一些简单的数据时,更是麻烦容易出错。
Bat-KV是一个开源于GitHub的羽量级面向.bat的单文件存储KV数据库,支持最基础的CRUD,封装了一些基本的API,非常容易上手。
如果项目有帮到你,还请不吝啬点个Star支持一下 :)
GitHub


Bat-KV 基础

存储文件

  • 文件扩展名: .bkv (Batch Key-Value)

  • 存储格式: 每行一个键值对,使用反斜杠 \ 分隔

    username\Alice
    age\25
    city\Beijing
    
  • 默认文件名: _BATKV.bkv

  • 字符集: 建议使用 ANSI 以确保兼容性

  • 键名限制: 只能包含英文字母、数字和下划线,长度不超过 36 个字符,区分大小写

方法与变量命名约定

  • 公共函数: 以 BKV. 前缀命名,例如 BKV.NewBKV.Fetch
  • 内部函数: 以 BKV.Private. 前缀开头,不应在外部直接调用
  • 内部变量: 以 BKV.Inner. 前缀开头,不应在外部直接访问
  • 返回变量规范:
    • BKV_STATUS:方法执行的返回状态(OK / NotOK
    • BKV_RESULT:查询结果值(如 BKV.Fetch 返回的值)
    • BKV_ERR:错误信息(失败时返回,格式为Bat-KV ERR: [错误信息]

下载与安装

获取Bat-KV

  1. 前往 GitHub Release 页面
  2. 下载 Bat-KV.zip
  3. 解压后得到核心文件 Bat-KV.bat

引入方式

  • 局部使用: 将 Bat-KV.bat 与目标批处理文件放在同一目录,使用时直接 call 即可
  • 相对路径: 如果文件在子目录或上级目录中,使用路径前缀导入
  • 全局使用: 将 Bat-KV.bat 所在目录添加到系统的 PATH 环境变量

示例:

REM 当前目录
call Bat-KV.bat :BKV.New

REM 子目录
call lib\Bat-KV.bat :BKV.New "mydata.bkv"

REM 上级目录
call ..\Bat-KV.bat :BKV.Fetch "username"

快速使用

最基础的例子包括创建数据库、写入、读取和删除数据:

@echo off

REM 创建数据库
call Bat-KV.bat :BKV.New
echo Create status: %BKV_STATUS%

REM 写入数据
call Bat-KV.bat :BKV.Append "name" "Alice"
call Bat-KV.bat :BKV.Append "age" "25"

REM 读取数据
call Bat-KV.bat :BKV.Fetch "name"
echo Name: %BKV_RESULT%

REM 判断是否存在
call Bat-KV.bat :BKV.Include "email"
if "%BKV_RESULT%"=="No" (
    call Bat-KV.bat :BKV.Append "email" "alice@example.com"
)

REM 删除数据
call Bat-KV.bat :BKV.Remove "age"
echo Remove status: %BKV_STATUS%

pause

API 快速说明

BKV.New

新建数据库文件。文件已存在时不会覆盖。

call Bat-KV.bat :BKV.New "config.bkv"

BKV.Append

插入或更新键值对。

call Bat-KV.bat :BKV.Append "username" "Alice"

BKV.Fetch

读取键对应的值。

call Bat-KV.bat :BKV.Fetch "username"
echo User: %BKV_RESULT%

BKV.Remove

删除键值对。(即使键不存在也返回成功)

call Bat-KV.bat :BKV.Remove "username"

BKV.Include

检测键是否存在。

call Bat-KV.bat :BKV.Include "db_host"
if "%BKV_RESULT%"=="No" (
    call Bat-KV.bat :BKV.Append "db_host" "localhost"
)

完整文档

完整文档及示例程序,请参考 GitHub 主仓库文档 及 Release 附带的脚本。