Dion 是一个 Windows 原生命令行工具,用于查看、列出、设置和删除文件与文件夹的备注,与 Total Commander 的带 BOM UTF-8 descript.ion 格式互操作。
Language / 语言: English | 简体中文
- 单文件运行:适用于 Windows 10/11 x64,无需安装 Rust 或额外运行库;当前本地 Release exe 为 605,696 字节(591.5 KiB)。
- 四个基础命令:查看单条备注、列出目录备注、设置或覆盖备注、显式删除备注。
- 列表展示:目录优先、名称自然排序,默认双栏对齐,支持
--long(-l)、--recursive(-r)、--tree、通过 Everything 索引加速递归查询及名称自动着色。 - Unicode 与多行:支持中文、Emoji、含空格的名称和多行正文,保留缩进、首尾空白和空行。
- 局部修改:保留其他记录的原始字节与顺序;设置相同内容时不写文件。
- 正文输入:支持正文参数、stdin、UTF-8 文本文件及
set --edit外部编辑;沿用 JSON 输出和稳定退出码。
当前支持本地 Windows 文件系统和单写者使用;网络共享不作兼容性承诺。descript.ion 必须是带 BOM 的 UTF-8 文件。
名称匹配使用 Windows 原生的不区分大小写比较,不跟随目录的大小写敏感设置;名称等价的重复记录视为冲突。具体规则见行为契约。
dion help [command]
dion --version|-V
dion [--json|-j] get <path>
dion [--json|-j] set <path> (<comment> | --comment-file|-f <file> | --stdin|-i | --edit|-e)
dion [--json|-j] list [directory] [--long|-l | --tree|-t] [--recursive|-r] [--everything [--everything-instance <name>]] [--all|-a] [--color auto|always|never]
dion [--json|-j] remove <path>
完整命令和别名行为相同,均支持 help <command> 和 <command> -h:
| 完整命令 | 别名 |
|---|---|
get |
view、cat |
list |
ls |
set |
无 |
remove |
rm、unset、del |
选项短写:--json/-j、--help/-h、--version/-V、--long/-l、--recursive/-r、--tree/-t、--all/-a、--stdin/-i、--comment-file/-f、--edit/-e。例如:
dion cat file.txt
dion ls -t
dion set file.txt -f comment.txt
dion set file.txt -e
dion unset file.txt -j
选项分开输入,值放在下一个参数中;不支持 -lr、-ffile 或等号传值。重复同义选项(如 --json -j)仍报参数错误。
get:查看指定文件或文件夹自身的备注。set:设置或覆盖条目自身的备注。非空正文要求目标存在;首次设置自动创建备注文件。正文来源四选一(互斥):<comment>:直接传入正文文本。--comment-file <file>:从 UTF-8 文本文件读取(推荐用于多行正文)。--stdin:从标准输入读取 UTF-8 正文。--edit:启动外部编辑器编辑(依次检索VISUAL、EDITOR或 Windows 记事本;清空内容将删除备注)。
list:查询目录内部条目的备注(默认为当前目录)。目录优先并按 Windows 自然排序。- 默认双栏对齐展示。
--long(-l):单栏详细展示,完整呈现多行正文。--recursive(-r):递归汇总子目录的备注。--everything:通过已运行的 Everything 索引发现递归备注文件,必须与--recursive或--tree组合。只查询已编入索引的路径,可能遗漏索引排除项;要求 Everything 1.4.1 或更高版本且数据库已加载。--everything-instance <name>:与--everything一起指定命名实例;默认优先查询1.5a,找不到时使用未命名实例。- 默认递归跳过
$RECYCLE.BIN、System Volume Information、.git、node_modules、.venv、__pycache__、.pytest_cache、.next、.svn、.mypy_cache、.ruff_cache、.tox、.nox和.parcel-cache;按完整目录名称不区分大小写匹配,主动跳过不报错。目录自身备注仍显示。 --all(-a):递归时包含上述默认排除目录;单独用于非递归列表时不改变结果。--tree:树状层级展开展示(自动递归;与--long互斥)。--color auto|always|never:默认仅在支持颜色的终端为名称着色;可强制开启或关闭,JSON 始终无颜色。- 默认跳过坏记录或无法读取的备注文件,继续查询;无法枚举的子目录整体跳过,起始目录无法访问时直接失败。
- 文本底部汇总跳过的错误;JSON 顶层含
root_directory(查询起始目录的绝对路径)及entries、errors数组,无错误时errors:[]。空列表也包含起始目录,有跳过错误时仍输出有效记录,退出码为1。起始目录按现有规则词法处理点组件,不解析链接目标,保留路径拼写及扩展路径前缀。 - 普通及递归 JSON 条目含
type(file、directory、orphan)、parent_directory、name、comment。所属目录相对于查询起始目录,使用反斜杠且无尾部分隔符,起始目录为"";name保留原始记录名称,不再拼入路径。 --tree --json输出与文本树相同节点的嵌套树:目录始终含children,文件和孤立记录不含;辅助目录使用comment: null,已有空备注使用comment: "",树节点不含parent_directory。两种列表均不输出程序扩展字段,Everything 查询沿用相同结构。
remove:显式删除条目自身的备注。目标条目本身不受影响;若目录内备注全部清空,自动清理备注文件。
- 获取帮助:支持
dion help [command]以及各命令的-h/--help参数查看用途、用法、参数及关键默认行为。 - 查询版本:
dion --version或dion -V输出dion <版本号>加换行并以 0 退出,版本号取自编译时的Cargo.toml。仅可搭配--json、--lang,始终输出相同文本;与操作命令、操作选项或帮助混用时报参数错误。 - 结构化输出:全局支持
--json输出机器可读的 JSON 格式及稳定退出码,帮助与版本查询仍为文本。 - 作用对象区分:
get、set、remove操作指定条目自身的备注(记录保存在其父目录中);list查询指定目录内部条目的备注。
本地安装 Rust stable 和 MSVC 构建工具后,运行统一检查入口:
.\scripts\check.ps1脚本依次执行格式检查、Clippy、完整测试和 Release 编译,产物为 target/release/dion.exe。默认静态链接 MSVC CRT。
GitHub Actions 在 push 和 pull request 时自动执行上述检查,也支持手动触发。推送 v* 版本标签时,发布流程 会在 Windows x64 上检查并编译,通过后创建 GitHub Release,使用 docs/releases/<标签>.md 中的发布笔记并上传 dion.exe。
发布前更新 Cargo.toml 和 Cargo.lock 中的版本号,准备并确认 docs/releases/<标签>.md 中的发布笔记,将代码与发布笔记提交并推送,再推送对应标签,例如:
git tag v0.3.2
git push origin v0.3.2用户可在 GitHub Releases 下载 dion.exe。
2026-10-08 在 Windows 11 x64、AMD Ryzen 9 7940H、31.2 GB 内存的本地环境中测得以下 Release 基线。每个场景预热后运行 5 次,表中为平均壁钟耗时,包含进程启动和退出;查询与列表使用文本输出。
| 操作 | 100 条记录 | 10,000 条记录 |
|---|---|---|
查看备注 get |
167.73 ms | 148.14 ms |
列出备注 list |
154.01 ms | 207.29 ms |
更新备注 set |
167.12 ms | 167.78 ms |
删除备注 remove |
208.08 ms | 217.87 ms |
本次 exe 体积为 354,816 字节(346.5 KiB);温运行场景的生命周期峰值提交量为 9.26–18.17 MiB。结果仅代表本次机器与工作负载,不构成固定时延保证。完整数据、测量口径与复现方法见性能测试报告。
可选择 MIT 或 Apache 2.0 许可证使用和分发。