Must-fix: drive permission apply now gates on confirmDangerousAction and declares confirmation=user_required, matching its help-text promise. Wukong parity restored: formula-verify --exit-on-error (payload-parsing exit path) and --targets conflict error, sheet info --include, chat location/profile message types, search-advanced wukong flag aliases, and a dedicated drive download-version leaf replacing the removed polymorphic download --version. Consistency fixes: transfer-owner --node/--workspace XOR and JSON-aware dry-run after --yes validation; drive list --versions rejects --depth/--pattern instead of misleading depth errors; depth BFS resumes rate-limited folders from the failed page cursor to avoid duplicates; doc style cover upload honors cmd.Context() and a 20 MiB size cap; chat user-settings set validates per-item openConversationId and is risk=medium. Hardened the skill static audit to scan fenced code blocks and reject unknown subcommands on group commands, fixing the stale aitable/drive doc examples it exposed. Added CHANGELOG entry and coverage tests for all changed statements plus previously untested ported commands.
38 KiB
钉盘 (drive) 命令参考
查询命令帮助
当你不确定某个命令的具体参数、格式或可选项时,优先执行 --help 查询,不要猜测参数名或凭记忆编造。
# 查看 drive 下所有子命令
dws drive --help
# 查看具体命令的完整参数说明
dws drive list --help
dws drive search --help
dws drive upload --help
dws drive download --help
规则:
- 参数名不确定时 → 先
--help,再调用 - 报错 "unknown flag" 时 →
--help确认正确的 flag 名称 - 不确定某个功能是否存在时 →
dws drive --help查看命令列表
命令总览
获取文件/文件夹列表
Usage:
dws drive list [flags]
Example:
dws drive list --limit 20
dws drive list --limit 20 --folder <dentryUuid> --order-by name --order asc
Flags:
--limit int 每页返回数量,默认 20,最大 50 (可选)
--cursor string 分页游标,首次不传 (可选)
--order string 排序方向: asc|desc,默认 desc (可选)
--order-by string 排序字段: createTime|modifyTime|name (可选)
--folder string 父节点 ID (dentryUuid),不传则列出空间根目录 (可选)
--space-id string 空间 ID,不传则使用「我的文件」对应 spaceId (可选)
--thumbnail 是否返回缩略图信息 (可选)
获取钉盘空间列表
Usage:
dws drive list-spaces [flags]
Example:
dws drive list-spaces
dws drive list-spaces --space-type mySpace
dws drive list-spaces --space-type orgSpace --limit 20 --cursor <TOKEN>
Flags:
--space-type string 空间类型: orgSpace=企业空间(默认), mySpace=我的文件 (可选)
--limit int 每页返回数量 (默认 20,最大 50),仅 spaceType 为 orgSpace 时有效
--cursor string 分页游标,仅企业空间支持分页 (可选)
spaceType 筛选规则:
orgSpace(默认/不传):返回企业空间列表,支持nextToken分页mySpace:返回用户的"我的文件"个人空间(单个,不支持分页)
返回字段说明:
spaceId— 空间 ID,用于list/info/upload等命令的--space-idspaceName— 空间名称(如"全员文件夹"、"我的文件")rootFolderId— 空间根目录的 dentryUuid,可作为doc copy/move的--folder参数spaceType— 空间类型(如orgSpace)nextToken— 若不为空,表示还有更多空间可查询(仅企业空间)
搜索文件/文件夹/空间
按关键词搜索文件、文件夹或团队空间。不同于 list(需要明确的 spaceId/parentId 逐层遍历),search 用于不知道具体位置、只记得名称/关键词的场景。
Usage:
dws drive search [flags]
Example:
dws drive search --query "季度汇报"
dws drive search --query "合同" --target file --extensions pdf,docx
dws drive search --query "项目" --target space
dws drive search --query "方案" --created-from 1700000000000 --created-to 1710000000000
dws drive search --query "周报" --creator-uids 012345
dws drive search --query "报告" --limit 30 --cursor <pageToken>
Flags:
--query string 搜索关键词 (必填)
--target string 搜索目标: all(默认) | file | space (可选)
--file-types strings 按文件内容类型过滤,逗号分隔: alidoc,document,image,video,audio,archive (仅 target=file/all 生效)
--extensions strings 按文件扩展名过滤,不含点号,逗号分隔 (如 pdf,docx,adoc)
--creator-uids strings 按创建者用户 ID 过滤,逗号分隔
--created-from int 创建时间起始 (毫秒时间戳,含)
--created-to int 创建时间截止 (毫秒时间戳,含)
--modified-from int 修改时间起始 (毫秒时间戳,含)
--modified-to int 修改时间截止 (毫秒时间戳,含)
--limit int 每页返回数量(默认 10,最大 30)
--cursor string 分页游标,从上次返回的 nextCursor 获取 (可选)
搜索目标 (--target) 选择规则:
all(默认):同时搜文件与空间,返回混合结果 — 不确定目标是文件还是空间时使用file:只搜文件 / 文件夹,支持--file-types/--extensions过滤 — 明确是找文件时使用space:只搜团队空间 — 明确知道空间名、需快速定位空间 spaceId/rootFolderId 时使用
返回结果中 type 字段区分:SPACE(空间)、FILE(普通文件)、FOLDER(文件夹)、ALIDOC(钉钉在线文档)。
提示:结果按相关性排序,首页未命中时优先调整关键词 / 补充
--file-types/--extensions缩小范围 / 加上时间范围,而非反复翻页。
获取最近访问/编辑的文档列表
Usage:
dws drive recent [flags]
Example:
dws drive recent
dws drive recent --operate-type 1
dws drive recent --creator-type 1 --limit 10
dws drive recent --file-types 0,1 --operate-type 0
Flags:
--file-types ints 按文档类型过滤,逗号分隔 (参考 RecentAccessType 枚举) (可选)
--operate-type ints 按操作类型过滤: 0=最近访问(默认), 1=最近编辑; 不传默认仅返回最近访问(0) (可选)
--creator-type int 按创建人过滤: 0=全部(默认), 1=我创建, 2=他人创建 (可选)
--org-ids ints 按资源所属组织 ID 过滤,逗号分隔 (可选)
--limit int 每页数量 (默认 20,最大 20) (可选)
--cursor string 分页游标,从上次返回的 nextCursor 获取 (可选)
返回字段说明:
recentItems[]— 最近访问/编辑的文档列表nodeId— 文档节点 ID,可用于doc read/info/update的--nodename— 文档名称contentType— 内容类型(如 ALIDOC)extension— 扩展名(如 adoc、axls、able)docUrl— 文档在线访问 URLoperateType— 操作类型:LAUNCH=访问,EDIT=编辑accessTime— 最近访问时间createTime/updateTime— 创建/更新时间
nextCursor— 翻页游标,传入--cursor获取下一页hasMore— 是否还有更多数据
获取文件元数据信息
Usage:
dws drive info [flags]
Example:
dws drive info --node <dentryUuid>
Flags:
--node string 节点 ID (dentryUuid) (必填)
--space-id string 节点所属空间 ID (可选)
文件内容获取路由规则
当用户请求"分析/查看/读取某个文件内容"时,必须先调用
dws drive info获取文件元数据,再根据返回的extension字段选择对应链路。 注意:若检测到钉钉文档类型(adoc/axls/amind/adraw),会自动跟进调用doc info返回更准确的文档信息。
| extension | 文件类型 | 操作 | 命令 |
|---|---|---|---|
| adoc | 在线文档 | 在线获取 Markdown 内容 | dws doc read --node <fileId> |
| axls | 在线表格 | 在线读取表格数据 | dws sheet list --node <ID> → dws sheet range read --node <ID> --sheet-id <SHEET_ID> --range <RANGE> |
| able | 多维表格 | 在线查询记录 | dws aitable table list --base-id <BASE_ID> → dws aitable record query --base-id <BASE_ID> --table-id <TABLE_ID> |
| md | Markdown 文件 | 读内容 / 创建 / 覆盖 / 局部替换 | dws markdown fetch / dws markdown create / dws markdown overwrite / dws markdown patch |
| 其他(pdf/docx/txt/png 等) | 普通文件 | 不支持在线分析,需用户主动下载后本地查看 | dws drive download |
下载文件到本地
下载流程一步到位:获取下载 URL → HTTP GET 下载文件二进制内容到本地。
Usage:
dws drive download [flags]
Example:
dws drive download --node <dentryUuid> --output ./report.pdf
dws drive download --node <dentryUuid> --output ~/downloads/
Flags:
--node string 文件 ID (dentryUuid) (必填)
--output string 本地保存路径 (文件路径或目录,不传则保存到当前目录);如果指定目录,文件名从下载 URL 中自动推断 (可选)
--space-id string 文件所属空间 ID (可选)
提示:
--output为可选参数,不传则保存到当前目录,文件名从下载 URL 中自动推断。
创建文件夹
Usage:
dws drive mkdir [flags]
Example:
dws drive mkdir --name "项目资料"
dws drive mkdir --name "子目录" --folder <dentryUuid>
Flags:
--name string 文件夹名称,最长 50 字符 (必填)
--folder string 父节点 ID (dentryUuid),不传则在空间根目录下创建 (可选)
--space-id string 目标空间 ID,不传则使用「我的文件」 (可选)
上传本地文件到钉盘
注意: 上传文件必须使用
dws drive upload命令,禁止使用upload-info+curl+commit三步流程。
Usage:
dws drive upload [flags]
Example:
dws drive upload --file ./report.pdf
dws drive upload --file ./slides.pptx --file-name "Q1汇报.pptx"
dws drive upload --file ./data.xlsx --folder <dentryUuid>
dws drive upload --file ./updated.pdf --node <dentryUuid> --file-name "<原文件名.pdf>"
Flags:
--file string 本地文件路径 (必填)
--file-name string 文件显示名称 (默认使用文件名)
--space-id string 目标空间 ID,不传则使用「我的文件」 (可选)
--mime-type string 文件 MIME 类型,不传则自动推断 (可选)
--folder string 父节点 ID (dentryUuid),不传则上传到空间根目录 (可选,与 --node 互斥)
--node string 覆盖目标文件 ID,传入即覆盖已有文件(透明模式:钉盘路径映射 overwriteFileId,知识库路径映射 overwriteNodeId)(可选,与 --folder 互斥)
upload 命令内部自动完成三步流程(获取凭证 → OSS PUT → 提交入库),无需手动分步操作。
覆盖保名规则(实测):使用
--node覆盖普通文件前,先执行dws drive info --node <dentryUuid> --format json记录原name,再把该值原样传给--file-name。省略--file-name会采用本地文件名,并同时重命名远端目标。extension=md不走本命令,切到dws markdown overwrite保留 Markdown diff 预览;adoc/axls/able切对应内容产品。
删除文件/文件夹到回收站
CAUTION: 不可逆操作 — 执行前必须向用户确认。
Usage:
dws drive delete [flags]
Example:
dws drive delete --node <dentryUuid> --format json # 查询 fileId: dws drive list
Flags:
--node string 文件/文件夹 ID (dentryUuid),即 drive list 返回的 fileId (必填)
注意:--node 使用的是 drive list 返回结果中的 fileId 字段(即 dentryUuid),不是 dentryId 字段。
查看回收站文件列表
Usage:
dws drive recycle list [flags]
Example:
dws drive recycle list
dws drive recycle list --space-id 12345 --limit 10
Flags:
--space-id string 钉盘空间 ID (选填,不传则返回所有空间)
--limit int 返回条数上限 (默认 20,最大 50)
--cursor string 分页游标 (选填)
还原回收站文件
Usage:
dws drive recycle restore [flags]
Example:
dws drive recycle restore --id <recycleItemId>
Flags:
--id string 回收项 ID (必填,从 recycle list 获取)
注意:还原操作可能是异步的(返回
async=true和taskId)。
收藏文档
Usage:
dws drive star add [flags]
Example:
dws drive star add --node <nodeId_or_URL>
Flags:
--node string 文档 ID 或 URL (必填)
取消收藏文档
Usage:
dws drive star remove [flags]
Example:
dws drive star remove --node <nodeId_or_URL>
Flags:
--node string 文档 ID 或 URL (必填)
获取收藏列表
Usage:
dws drive star list [flags]
Example:
dws drive star list
dws drive star list --content-types doc,sheet
dws drive star list --resource-types DENTRY --limit 10
dws drive star list --order-by createTime --sort desc --cursor <nextCursor>
Flags:
--limit int 每页条数 (默认 20,最大 20)
--cursor string 分页游标,从上次返回的 nextCursor 获取
--order-by string 排序字段: createTime (可选)
--sort string 排序方向: asc|desc (可选,默认 desc)
--resource-types strings 资源大类筛选,逗号分隔: DENTRY, TEAM, WORKSPACE
--content-types strings 内容类型筛选,逗号分隔: doc,sheet,ppt,whiteboard,mind,notable,pdf,other,folder
返回字段说明:
starList[]— 收藏项数组,每项包含:resourceType— 资源类型: DENTRY / TEAM / WORKSPACEnodeId— 文档节点 ID(仅 DENTRY)name— 资源名称url— 资源访问链接contentType— 内容类型: ALIDOC / DOCUMENT / IMAGE / VIDEO / AUDIO / ARCHIVE / OTHER(仅 DENTRY)extension— 文件扩展名(仅 DENTRY)dentryType— 节点类型: file / folder(仅 DENTRY)starTime— 收藏时间(RFC 3339 格式)id— 资源唯一标识(仅 TEAM / WORKSPACE)spaceType— 知识库类型: 1=知识库, 2=我的文档(仅 WORKSPACE)
hasMore— 是否有更多数据nextCursor— 下次分页游标
意图判断
用户说"我的文件/钉盘/网盘/云盘" → list
用户说"最近访问/最近打开/最近编辑/最近文档" → recent(默认仅最近访问,--operate-type 1 仅最近编辑,--operate-type 0,1 全部)
用户说"钉盘空间/团队文件/有哪些空间/空间列表/团队文件列表" → list-spaces
用户说"搜索钉盘文件/钉盘里找个文件/查找某个钉盘文件/钉盘中搜索" → search
用户说"文件详情/文件信息" → info
用户说"下载文件" → download
用户说"新建文件夹/创建目录" → mkdir(钉盘空间)/ folder create(文档空间)
用户说"上传文件/传文件到钉盘" → upload(必须使用此命令,自动完成三步流程)
用户说"复制文件/移动文件/搬到/移到" → copy / move
用户说"创建快捷方式/创建链接/放个快捷方式/引用到其他位置" → shortcut
用户说"阅读量/查看次数/多少人看过/点赞数/评论数/下载次数/文档统计/数据统计" → stats
用户说"封面/封面图/缩略图/预览图/节点封面" → cover
用户说"历史版本/版本列表/文件版本/有哪些版本/版本记录" → list --versions --node <id>
用户说"下载历史版本/下载旧版本/恢复历史版本到本地" → download --version <N>
用户说"回滚版本/恢复到某个版本/还原到旧版本/版本回退" → revert(危险操作,需确认)
用户说"重命名/改名" → rename
用户说"删除文件/删除文件夹/移到回收站" → delete(危险操作,需确认)
用户说"回收站/查看回收站/回收站列表/回收站里有什么" → recycle list
用户说"恢复文件/还原删除的文件/从回收站恢复/还原回收站文件" → recycle restore
用户说"收藏文档/收藏这个文件/加个收藏/标星" → star add
用户说"取消收藏/去掉收藏/不收藏了" → star remove
用户说"我的收藏/收藏列表/收藏了哪些文档/看看收藏" → star list
用户说"给文档授权/分享权限" → permission add
用户说"打不开/没权限/申请权限/我要编辑权限/找谁审批/申请访问权限" → 先 permission apply-info 查可申请角色与审批人 → 再 permission apply 发起申请
用户说"公开文件/互联网公开/设置公开/让互联网所有人可访问" → publish set
用户说"关闭公开/取消公开/取消互联网访问" → publish unset
用户说"查看公开状态/是否公开/发布状态" → publish get
用户说"查任务状态/导出好了没/任务进度/导入状态" → 文档导出用 dws doc export get --job-id <ID>,导入用 dws doc import get --task-id <ID>
关键区分: drive(文件管理) vs doc(文档内容读写) vs wiki(空间管理)
drive search vs wiki node search: 用户提到"钉盘/网盘/我的文件里搜" → drive search;提到"知识库/文档空间/workspace 里搜" → wiki node search;未明确目标时优先问明。
drive upload: 新文件上传统一走 drive upload。覆盖普通文件时先 drive info 取原 name,再用 drive upload --node <ID> --file <PATH> --file-name "<原name>" --format json;省略 --file-name 会隐式重命名。上传到知识库/文档空间时加 --workspace 参数。
drive permission vs wiki member: "给某篇文档/文件授权" → drive permission add(节点级);"给某个知识库整体加成员" → wiki member add(空间级)
创建在线文档/表格/脑图: drive 不支持创建文件,需走 wiki node create --type <type>(创建空节点)或 doc create(创建并写入内容)。
导出文档/导出为Word: 导出是内容层操作,走 doc export,不属于 drive。超时后的状态查询用 dws doc export get --job-id <ID>。
版本管理: 当前 CLI 仅支持钉钉在线文档(adoc)的版本管理(dws doc version list/save/revert);普通文件的历史版本列出/下载/回滚暂不支持。
.md 文件的内容操作路由: 当 drive info 返回 extension=md 时,文件管理操作(移动/重命名/删除/下载文件)留在 drive,但读取或改写原文内容必须切换到 markdown 产品:
- 用户说"读取/看一下 markdown 内容/获取 .md 原文" →
dws markdown fetch --node <ID>(非drive download) - 详见
dingtalk-markdown的 markdown.md
核心工作流
# 1. 浏览「我的文件」根目录
dws drive list --limit 20 --format json
# 2. 进入子目录 — 提取 dentryUuid 作为 folder
dws drive list --limit 20 --folder <dentryUuid> --format json
# 3. 查看文件元数据
dws drive info --node <dentryUuid> --format json
# 4. 下载文件到本地
dws drive download --node <dentryUuid> --output /tmp/ --format json
# 5. 创建文件夹
dws drive mkdir --name "项目资料" --format json
# 6. 上传文件(必须使用 upload 命令,禁止手动分步操作)
dws drive upload --file ./报告.pdf --format json
dws drive upload --file ./报告.pdf --folder <dentryUuid> --format json
# 7. 删除文件/文件夹到回收站(危险操作:必须先向用户确认,用户同意后才加 --yes 执行)
# 正确流程:1.向用户展示"即将删除「文件名」到回收站" → 2.等用户确认 → 3.执行下面命令
dws drive delete --node <dentryUuid> --yes --format json
# 8. 查看回收站并还原文件
dws drive recycle list --format json
dws drive recycle restore --id <recycleItemId> --format json
# 9. 收藏 / 取消收藏 / 查看收藏列表
dws drive star add --node <nodeId_or_URL> --format json
dws drive star remove --node <nodeId_or_URL> --format json
dws drive star list --format json
dws drive star list --content-types doc,sheet --limit 10 --format json
无权限引导申请工作流
当 Agent 执行文档操作(如 doc read / drive info / drive download)遇到权限拒绝错误时,按以下流程引导用户申请权限:
CAUTION(红线):
apply会真实通知审批人,属于有副作用操作。Agent 严禁自行提交申请。必须先向用户逐项回显确认「资源 / 角色 / 审批人 / 理由」,得到用户明确同意后,才能执行apply。用户未明确同意前,只能停在确认环节,不得调用apply。
1. 识别错误 → 询问用户「该文档你暂无权限,是否申请?」
2. 用户确认申请 → 查可申请角色与审批人:
dws drive permission apply-info --node <节点ID或URL> --format json
3. 向用户展示 availableRoles / approvers,询问「申请哪个角色?发给哪位审批人?」
4. 用户选择 role + 审批人(可选填 reason)
5. Agent 回显确认「资源 / 角色 / 审批人 / 理由」→ 等待用户明确同意(这是提交前的强制关卡,不可跳过)
6. 仅在用户明确同意后,才发起申请:
dws drive permission apply --node <节点ID或URL> --role <EDITOR|DOWNLOADER|READER> --users <审批人userId> [--reason "..."]
7. 展示 applyResult / applyResultDesc
要点:
apply-info的availableRoles[].roleId→apply --role;approvers[].userId→apply --usersapply严禁自动/静默调用:必须由用户在看到确认信息后明确同意(如回复"确认/同意/提交")才可执行;Agent 不得替用户决定或跳过确认applyResult含义:NORMAL(已提交)/HAS_PERMISSION_ALREADY(已拥有)/APPLYING(审批中)/APPLYING_BUT_REAPPLY(已重新提交)
文档空间管理命令
以下命令操作的是文档空间(知识库 / 我的文档),底层路由到 doc MCP server。 与钉盘命令(list / mkdir / upload 等)的区别:钉盘命令操作钉盘空间(spaceId 纯数字),文档空间命令操作知识库/我的文档(workspaceId 加密 string)。
复制/移动/重命名文件
Usage:
dws drive copy --node <ID> [--folder <TARGET>] [--workspace <WS>]
dws drive move --node <ID> [--folder <TARGET>] [--workspace <WS>]
dws drive rename --node <ID> --name "新名称"
Flags:
--node string 文档/文件 ID 或 URL (必填)
--folder string 目标文件夹 nodeId
--workspace string 目标知识库 ID
--name string 新名称 (仅 rename 必填)
字段选择:
drive list返回中有dentryId(数字格式)和fileId(UUID 格式),**必须使用fileId(UUID 格式)**作为--node和--folder参数值。
获取节点统计信息
获取指定节点的统计数据(阅读人数、阅读次数、编辑次数、评论数、点赞数、预览次数、下载次数等)。
Usage:
dws drive stats [flags]
Example:
dws drive stats --node <dentryUuid>
dws drive stats --node https://alidocs.dingtalk.com/i/nodes/<dentryUuid>
Flags:
--node string 节点 ID (dentryUuid) 或文档 URL (必填)
统计维度因文件类型而异:
- 钉钉在线文档(adoc):阅读人数、阅读次数、编辑次数、评论数、点赞数、预览次数等
- 普通文件:仅阅读次数、下载次数
- 点赞数(likeCount)仅在线文档(adoc)有效
获取节点封面地址
获取指定节点的封面图片地址。
Usage:
dws drive cover [flags]
Example:
dws drive cover --node <dentryUuid>
dws drive cover --node https://alidocs.dingtalk.com/i/nodes/<dentryUuid>
Flags:
--node string 节点 ID (dentryUuid) 或文档 URL (必填)
封面因文件类型而异:
- 钉钉在线文档(adoc):文档首图/预览封面
- 图片文件:图片缩略图地址
- 其他文件:文件类型图标地址(如有)
文件历史版本管理
获取文件历史版本列表、下载历史版本。
适用范围:仅适用于普通文件(如 pdf、docx、xlsx、png 等)。
- 钉钉在线文档(adoc)请使用
dws doc version list- 钉钉在线表格(axls)请使用
dws sheet version list- 命令会自动检测文件类型,若为在线文档会提示使用对应服务命令
获取文件历史版本列表
Usage:
dws drive list --versions [flags]
Example:
dws drive list --node <dentryUuid> --versions --format json
dws drive list --node <dentryUuid> --versions --limit 20 --format json
Flags:
--node string 文件 ID (dentryUuid) 或 URL (必填)
--limit int 每页最大数量 (默认 20,最大 50)
--cursor string 分页游标 (从上次返回结果获取,首次不传)
下载文件历史版本
Usage:
dws drive download-version [flags]
Example:
dws drive download-version --node <dentryUuid> --version 3 --output ./report_v3.pdf --format json
dws drive download-version --node <dentryUuid> --version 3 --output <DOWNLOAD_DIR> --format json
Flags:
--node string 文件 ID (dentryUuid) 或 URL (必填)
--version int 历史版本号 (必填,正整数,从 list --versions 获取)
--output string 本地保存路径 (文件路径或目录,必填)
两步下载流程:先调用 MCP 工具获取历史版本下载 URL 和签名头,再 HTTP GET 下载文件内容到本地。
--output指定目录时,优先从文件信息中获取原始文件名,获取不到时从下载 URL 推断。
回滚文件到指定历史版本
CAUTION: 危险操作 — 执行前必须向用户确认。
Usage:
dws drive revert [flags]
Example:
dws drive revert --node <dentryUuid> --version 3 --yes --format json
Flags:
--node string 文件 ID (dentryUuid) 或 URL (必填)
--version int 要回滚到的历史版本号 (必填,正整数)
--yes 跳过确认提示
回滚成功后,系统会基于目标版本生成一份新的最新版本(内容与目标版本一致),原有历史版本不会丢失。
仅支持普通文件(Word、Excel、PDF、图片等)的历史版本回滚。在线文档的版本回滚请用 dws doc version revert,在线表格请用 dws sheet version revert。
需要当前用户对该文件具备编辑权限。
创建快捷方式
为指定的源节点创建快捷方式(链接),放置到目标位置。
Usage:
dws drive shortcut [flags]
Example:
dws drive shortcut --node <dentryUuid>
dws drive shortcut --node <dentryUuid> --folder <targetFolderId>
dws drive shortcut --node <dentryUuid> --workspace <workspaceId>
Flags:
--node string 源节点 ID (dentryUuid) 或文档 URL (必填)
--folder string 目标文件夹 nodeId,不传则放到知识库/我的文档根目录 (可选)
--workspace string 目标知识库 ID (可选)
目标位置规则:
--folder和--workspace都不传时默认放置到「我的文档」根目录;同时传入时以--folder为准,--workspace仅用于一致性校验。 权限要求:对源节点有“可查看”权限,对目标文件夹有“编辑”权限。 目标位置限制:若目标位置不支持在其下创建子节点(如快捷方式节点、非文件夹),会返回错误,请改指定一个文件夹作为目标位置。
创建文件夹(文档空间)
Usage:
dws drive folder create --name "文件夹名"
Flags:
--name string 名称 (必填)
--folder string 父文件夹 nodeId
--workspace string 目标知识库 ID
权限管理(文档节点级)
Usage:
dws drive permission add --node <ID> --users uid1,uid2 --role READER
dws drive permission update --node <ID> --users uid1 --role EDITOR
dws drive permission list --node <ID>
dws drive permission remove --node <ID> --users uid1
dws drive permission transfer-owner --node <ID> --new-owner <userId>
dws drive permission transfer-owner --workspace <WS_ID> --new-owner <userId>
dws drive permission transfer-owner --node <ID> --new-owner <userId> --reserve-role EDITOR --recursive=false --yes
Flags:
--node string 目标节点 ID 或 URL (必填)
--users string 用户 userId 列表,逗号分隔
--role string 角色: MANAGER / EDITOR / DOWNLOADER / READER
--limit int 返回成员数上限 (仅 list,默认 30,最大 200)
--filter-role string 按角色过滤 (仅 list)
--workspace string 目标知识库 ID 或 URL (仅 transfer-owner,与 --node 二选一)
--new-owner string 新所有者的用户 userId (仅 transfer-owner,必填)
--reserve-role string 转交后原所有者保留角色: MANAGER / EDITOR / DOWNLOADER / READER / NONE(移除权限) (仅 transfer-owner)
--recursive bool 是否递归变更所有子节点的所有者 (仅 transfer-owner)
transfer-owner为 [危险] 操作,执行前需要确认。
- 交互模式下会依次提示选择原所有者保留角色、是否递归变更子节点,然后显示操作摘要等待确认
- 使用
--yes跳过确认时,--reserve-role和--recursive必须显式指定(禁止静默默认值)--reserve-role NONE表示移除原所有者的所有权限- 当前用户需为该节点/知识库的所有者才能执行转交
** Agent 行为约束(必须遵守)**
--reserve-role和--recursive属于高风险操作的核心决策参数,必须由用户明确指定,Agent 不得自行选择默认值(如NONE/false)代替用户决策。执行
transfer-owner前,Agent 必须先通过对话向用户询问以下两个问题,只有在用户明确回答后才构造命令执行:
- "转交后原所有者保留什么角色?" 选项:
MANAGER(管理者)EDITOR(编辑者)DOWNLOADER(下载者)READER(只读者)NONE(移除原所有者权限)- "是否递归变更所有子节点的所有者?" 选项:
true(是)false(否)正确流程:1.向用户询问上述两个问题 → 2.根据用户选择构造
--reserve-role <用户选择> --recursive=<用户选择> --yes→ 3.执行命令禁止在未获得用户明确回答的情况下直接执行命令。
权限申请(无权限时发起申请)
当你对文档/知识库暂无访问权限时,可查询可申请的角色与审批人,并向审批人发起权限申请。
Usage:
dws drive permission apply-info --node <ID>
dws drive permission apply --node <ID> --role <ROLE> --users <审批人userId...>
Example:
dws drive permission apply-info --node <dentryUuid>
dws drive permission apply --node <dentryUuid> --role READER --users uid1
dws drive permission apply --node <dentryUuid> --role EDITOR --users uid1,uid2 --reason "需要编辑该文档"
Flags:
--node string 目标节点 ID 或 URL (必填)
--role string 申请的角色: EDITOR / DOWNLOADER / READER (仅 apply 必填)
--users string 审批人 userId 列表,逗号分隔 (仅 apply 必填)
--notify-mode string 通知方式: DEFAULT / MSG_ACCOUNT / SINGLE_CHAT (仅 apply 可选)
--reason string 申请理由,最长 200 字符 (仅 apply 可选)
子命令说明:
apply-info— 查询节点可申请的角色列表 (availableRoles) 与审批人列表 (approvers)apply— 向审批人发起权限申请
返回字段说明:
apply-info:availableRoles[].roleId— 可申请角色 (EDITOR/DOWNLOADER/READER),用作apply --roleavailableRoles[].name/desc— 角色名称/描述approvers[].userId— 审批人 userId,用作apply --usersapprovers[].userName— 审批人名称approvers[].isResourceCreator— 是否为资源创建者
apply:applyResult— 申请结果:NORMAL(已提交申请)/HAS_PERMISSION_ALREADY(已拥有该权限)/APPLYING(已有待审批申请)/APPLYING_BUT_REAPPLY(已重新提交申请)applyResultDesc— 结果的人类可读描述
重要(Agent 编排):
apply会向审批人发送通知,属副作用操作。Agent 必须在调用apply前,向用户回显「资源 / 申请角色 / 审批人 / 理由」并取得用户确认后再执行。
文件互联网公开发布
管理文件的互联网公开发布状态。公开后任何人通过链接即可访问,无需登录钉钉。操作者需要是文件的管理员或拥有者。
publish set和publish unset为 [危险] 操作,执行前需要确认。必须传入--yes跳过交互式确认。
Usage:
dws drive publish set --node <fileId> [--permission READER|DOWNLOADER|EDITOR]
dws drive publish unset --node <fileId>
dws drive publish get --node <fileId>
Example:
dws drive publish set --node <dentryUuid>
dws drive publish set --node <dentryUuid> --permission READER
dws drive publish get --node <dentryUuid>
dws drive publish unset --node <dentryUuid>
Flags:
--node string 目标文件 ID (dentryUuid) 或 URL (必填)
--permission string 公开后的权限: READER(仅可查看) / DOWNLOADER(可查看和下载,默认) / EDITOR(可编辑),仅 set 有效
子命令说明:
publish set— [危险] 设置文件为互联网公开,可选指定公开权限publish unset— [危险] 关闭文件互联网公开publish get(别名status)— 查询文件当前的公开发布状态
返回字段说明:
published— true=已公开,false=未公开publishPermission— 当前公开权限(READER/DOWNLOADER/EDITOR)pendingApproval— true=已提交审批待生效,false/null=无需审批或已直接生效docUrl— 文件访问链接
注意:
drive export不存在。导出仅对自研文档 (adoc) 有意义,属于内容层操作,应使用doc export。
目标位置参数规则
| 目标位置 | 参数传递方式 | 前置步骤 |
|---|---|---|
| 未指定目标(默认) | --folder <rootFolderId> |
先 dws drive list-spaces --space-type mySpace 获取「我的文件」的 rootFolderId |
| 知识库空间根目录 | --workspace <workspaceId> |
无需额外步骤 |
| 钉盘 space 根目录 | --folder <rootFolderId> |
先 dws drive list-spaces 获取目标 space 的 rootFolderId |
| 钉盘 space 下的子文件夹 | --folder <fileId> |
先 dws drive list --space-id <spaceId> 逐层浏览 |
工作流示例
# ── 场景 默认: 复制/移动到「我的文件」根目录 ──
dws drive list --space-id <SPACE_ID> --format json
dws drive list-spaces --space-type mySpace --format json
dws drive copy --node <源文件dentryUuid> --folder <我的文件rootFolderId> --format json
# ── 场景 A: 复制到知识库空间根目录 ──
dws drive copy --node <源文件dentryUuid> --workspace <TARGET_WS_ID> --format json
# ── 场景 B: 移动到另一个钉盘 space 根目录 ──
dws drive list-spaces --format json
dws drive move --node <源文件dentryUuid> --folder <目标space的rootFolderId> --format json
# ── 场景 C: 复制到钉盘子文件夹 ──
dws drive list --space-id <TARGET_SPACE_ID> --format json
dws drive copy --node <源文件dentryUuid> --folder <目标文件夹fileId> --format json
上下文传递表
| 操作 | 从返回中提取 | 用于 |
|---|---|---|
list |
fileId(UUID 格式,注意:不是 dentryId) |
info / download / mkdir / delete / stats / shortcut / cover 的 --node 或 --folder;drive copy/move 的 --node 或 --folder |
list |
spaceId |
info / download / mkdir / commit 的 --space-id |
list-spaces |
rootFolderId |
drive copy/move 的 --folder(复制/移动到钉盘 space 根目录时) |
list-spaces |
spaceId |
list / info / download / mkdir / upload 的 --space-id |
search |
fileId(文件/文件夹结果) |
info / download / delete 的 --node;list 的 --folder |
search |
spaceId / rootFolderId(空间结果) |
list 的 --space-id;drive copy/move 的 --folder |
search |
nextCursor |
search 的 --cursor(翻页) |
mkdir |
fileId(UUID 格式) |
list 的 --folder |
recycle list |
id(回收项 ID) |
recycle restore 的 --id |
recycle list |
name(原始文件名) |
供用户确认还原目标 |
recent |
recentItems[].nodeId / docUrl |
doc read / info / update / block 操作的 --node |
recent |
nextCursor |
recent 的 --cursor(翻页) |
permission apply-info |
availableRoles[].roleId |
permission apply 的 --role |
permission apply-info |
approvers[].userId |
permission apply 的 --users |
star list |
starList[].nodeId |
star remove 的 --node;info / download 的 --node |
star list |
nextCursor |
star list 的 --cursor(翻页) |
重要:
drive list返回结果中同时包含dentryId和fileId两个字段。所有需要传--node的命令(info / download / delete)必须使用fileId(即 dentryUuid),不要使用dentryId。
注意事项
- 不传
--space-id时默认使用「我的文件」空间 - 不传
--folder时默认操作空间根目录 --folder只能使用父文件夹的dentryUuid。不要把drive info返回的数字型dentryId当作父目录;dentryId只用于chat message send --dentry-id--limit最大值为 50,禁止传入超过 50 的值(如--limit 100)。用户要求超过 50 条时,应使用--limit 50配合--cursor分页查询,不要直接传大于 50 的值--order-by支持:createTime、modifyTime、name- 上传文件必须使用
dws drive upload命令,禁止使用upload-info+curl+commit三步手动流程 --file-name必须包含扩展名(如report.pdf)
自动化脚本
| 脚本 | 场景 | 用法 |
|---|---|---|
| drive_tree_list.py | 递归列出钉盘目录树结构 | python drive_tree_list.py --depth 2 |