Windows .bat 脚本中文化开发经验
时间:2026-6-8 17:10 作者:六度科技 分类: AI提示词
Windows .bat 脚本中文化开发经验
核心原则
Windows CMD 对中文 .bat 的正确处理需要同时满足三个条件:
| 条件 | 正确做法 | 错误做法 |
|---|---|---|
| 编码 | GB2312 / GBK(代码页 936) | UTF-8、UTF-8 with BOM |
| 换行符 | CRLF(\r\n) |
纯 LF(\n) |
| 特殊符号 | 避免等号分隔线 | 等号在 GBK 下可能乱码 |
为什么不能用 UTF-8?
- UTF-8 without BOM:CMD 按系统默认代码页(936)解析,中文全部变成乱码
- UTF-8 with BOM:BOM 字符会被 CMD 当作命令的一部分,导致各类解析错误
- 即使加了
chcp 65001,CMD 对 UTF-8 源文件的解析仍不稳定
正确做法:直接使用系统默认代码页 GB2312,无需 chcp 65001。
写入工具的选择
严禁使用 AI 助手的 Write 工具写入含中文的 .bat 文件。
Write 工具会将所有非 ASCII 字符静默替换为 ?,数据直接丢失,无法恢复。
必须通过 PowerShell RunCommand 直接构建并写入:
$enc = [System.Text.Encoding]::GetEncoding(936)
$content = @'
@echo off
setlocal enabledelayedexpansion
title 我的程序
echo 你好世界
'@
# 确保 CRLF 换行
$content = $content -replace "`r`n", "`n" -replace "`n", "`r`n"
$bytes = $enc.GetBytes($content)
[System.IO.File]::WriteAllBytes('目标文件.bat', $bytes)
关键步骤:
GetEncoding(936)— 获取 GB2312 编码器@'...'@— PowerShell here-string,保留原始换行- 统一换行符为 CRLF
WriteAllBytes— 直接写字节,不经过任何编码转换
显示风格建议
- 不要用等号分隔线:等号字符在中文 GBK 环境下显示效果差
- 用空行分隔:简洁清晰,无编码风险
- 标签用中文方括号:
[提示]、[错误]代替[INFO]、[ERROR] - 窗口标题也要中文:
title命令同样使用中文
完整模板
@echo off
setlocal enabledelayedexpansion
title 程序名称
echo.
echo 程序名称
echo 功能描述
echo.
echo.
:: 步骤1:初始化
echo [提示] 正在初始化...
:: 步骤N:启动
echo 正在启动...
echo 按 Ctrl+C 停止
echo.
python -m my_module
if errorlevel 1 (
echo.
echo [错误] 启动失败
pause
)
exit /b
常见错误对照
| 症状 | 原因 | 解决 |
|---|---|---|
中文显示为 ???? |
UTF-8 编码 | 改为 GB2312 |
xxx 不是内部或外部命令 |
UTF-8 BOM 被当作命令 | 移除 BOM,改用 GB2312 |
| 中文被截断或乱序 | 换行符为 LF | 改为 CRLF |
中文变成 ?(不可逆) |
用了 Write 工具 | 用 PowerShell 重建文件 |