Windows 批处理编写规范

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

编写 Windows 批处理(.bat/.cmd)脚本时的编码与行尾规范。当需要创建、修改、生成 .bat 启动器/快捷脚本,或遇到 cmd 报出「'xxx' 不是内部或外部命令」这类由编码/行尾引起的幽灵命令错误时使用。尤其适用于 AI 工具(Write/Edit)写出的 .bat 直接交给用户运行会乱码的场景。

一句话选型结论

按资料字段整理

Windows 批处理编写规范是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_d7541fa0/windows-bat-authoring
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_d7541fa0仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验2026-11-06上游最后核验时间 · 数据更新 2026-11-06
正文体量6.9 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
Windows 批处理编写规范当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

6.9 KB
模型实际读到的说明书原文,来自技能仓库

Windows 批处理编写规范(.bat 编码 + 行尾)

为什么需要这个技能

AI 编码工具(Write / Edit / 各类编辑器)默认输出 UTF-8 无 BOM + LF 行尾。
这两个默认值对 .bat 都是致命的:cmd.exe 有自己的读取规则,会因此报出
一堆看起来毫无道理的「幽灵命令」错误,而脚本可能"一半能跑一半报错",
极难自行定位。

触发信号:用户反馈运行 .bat 时出现
- '宸茶杩涚▼' 不是内部或外部命令 —— 中文整行乱码(编码问题)
- 'ktop' 不是内部或外部命令、'when' 不是… —— 命令名被截断(行尾问题)
- 或两者混合出现


两条铁律

维度 要求 违反后的症状
内容编码 纯 ASCII;确需中文则存 GBK(非 UTF-8) 整行变乱码:'鍦板潃:' 不是…
行尾 CRLF(\r\n),不能是纯 LF 整行错位截断:'ktop' 不是…

原理:
- cmd.exe 按系统 OEM 代码页读取批处理(简体中文 = GBK/936)。
UTF-8 中文被按 GBK 解码 → 乱码 → 乱码行会被当作命令尝试执行。
- chcp 65001 对已经读入的行来不及生效,救不了场(它是运行时切换,
而文件解析在更早阶段)。
- cmd.exe 的行分割依赖 CRLF。纯 LF 会导致按字节偏移错位切行。


标准做法

1. 内容全 ASCII

注释、echo、title、错误提示全用英文。脚本丑一点无所谓,能跑最重要。

@echo off
rem ============================================================
rem  my launcher  -  ASCII ONLY, CRLF endings
rem    1) ASCII: cmd.exe reads .bat with the OEM codepage (GBK
rem       on zh-CN). UTF-8 Chinese gets mis-decoded into garbage
rem       that cmd then tries to EXECUTE.
rem    2) CRLF: a LF-only .bat makes cmd mis-split lines, giving
rem       truncated errors like 'ktop' / 'when'.
rem ============================================================

2. 中文路径不要硬编码

项目文件夹名是中文时(如 D:\projects\我的工具\),
不要在脚本内容里写这个路径。改用 %~dp0 自解析:

rem 从脚本自身所在目录向上查找项目根
set "PROJ="
for %%D in ("%~dp0." "%~dp0.." "%~dp0..\..") do (
    if not defined PROJ if exist "%%~fD\tools\app.py" set "PROJ=%%~fD"
)
if not defined PROJ (
    echo [x] Could not locate the app near this script.
    goto :end
)
cd /d "%PROJ%"

> 文件名含中文是安全的(文件名不进命令解析);文件内容含中文才危险。

3. 中文名脚本用"薄壳"模式

想保留中文文件名方便识别,就让中文名文件只做转发:

启动查看器.bat(中文名,内容纯 ASCII):

@echo off
call "%~dp0launch_viewer.bat" %*

真正的逻辑放在 ASCII 文件名的 launch_viewer.bat 里。

4. 写完后必须规范化行尾与编码

Write 工具写完后,必须用 PowerShell 二次处理:

$p = "D:\path\to\script.bat"
$t = [IO.File]::ReadAllText($p)
# 先把所有行尾归一为 LF,再统一成 CRLF(幂等,避免出现 \r\r\n)
$t = $t -replace "`r`n", "`n"
$t = $t -replace "`n", "`r`n"
# 纯 ASCII 内容用 ASCII 写;含中文用 GBK(不要用 UTF8)
[IO.File]::WriteAllText($p, $t, [Text.Encoding]::ASCII)
# 含中文时改为:
# [IO.File]::WriteAllText($p, $t, [Text.Encoding]::GetEncoding("GB2312"))

校验(必做)

一次统计两个维度,期望 SOLO_LF=0 且 NON_ASCII=0:

$p = "D:\path\to\script.bat"
$b = [IO.File]::ReadAllBytes($p)
$crlf = 0; $solo = 0; $non = 0
for ($i = 0; $i -lt $b.Length; $i++) {
    if ($b[$i] -eq 10) { if ($b[$i-1] -eq 13) { $crlf++ } else { $solo++ } }
    if ($b[$i] -gt 127) { $non++ }
}
"CRLF=$crlf  SOLO_LF=$solo  NON_ASCII=$non"
# SOLO_LF 必须为 0;NON_ASCII 为 0(纯 ASCII)或为 GBK 中文(可接受,前提是 GBK 存盘)

批量校验:

Get-ChildItem "D:\proj" -Filter *.bat -Recurse | ForEach-Object {
    $b = [IO.File]::ReadAllBytes($_.FullName)
    $solo = 0; $non = 0
    for ($i = 0; $i -lt $b.Length; $i++) {
        if ($b[$i] -eq 10 -and $b[$i-1] -ne 13) { $solo++ }
        if ($b[$i] -gt 127) { $non++ }
    }
    "{0,-40} SOLO_LF={1,-4} NON_ASCII={2}" -f $_.Name, $solo, $non
}

常见陷阱

  1. for /f 里用 set /p 询问 → 无控制台时卡死或闪退。
    启动器尽量做成无交互;确有分支时用明确的默认行为。

  2. for /f 解析 netstat 拿 PID 后直接 taskkill ——
    如果服务其实正常在跑,会把用户正在用的服务杀掉。
    更稳妥:检测到端口已占用时,只打开浏览器并退出,提示"服务已在运行"。

  3. RedirectStandardOutput 捕获不到 bat 的 @echo off 输出,
    用重定向方式测脚本会看到空文件。要验证脚本本身,直接在真实终端里跑。

  4. git add -A 会把临时文件/工作目录一并提交,
    写完校验脚本要及时清理,并把工作目录加进 .gitignore。


自检清单

写完一个 .bat 之后,逐条确认:

  • [ ] 内容是否全 ASCII?(必须;若含中文,是否已 GBK 存盘?)
  • [ ] 行尾是否 CRLF?(用校验脚本确认 SOLO_LF=0)
  • [ ] 是否避免了硬编码中文路径?(用 %~dp0 自解析)
  • [ ] 是否有无交互卡死的风险(set /p / pause 位置)?
  • [ ] 端口检测逻辑是否会误杀正在运行的服务?
  • [ ] 是否在真实终端里跑过一遍?

常见问题

5 问
答案由本站依据条目字段整理
Windows 批处理编写规范怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_d7541fa0/windows-bat-authoring。安装方式为未标注。装完刷新技能列表或重开客户端。

Windows 批处理编写规范支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

Windows 批处理编写规范权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

Windows 批处理编写规范收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

Windows 批处理编写规范用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 2026-11-06。