«

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?

正确做法:直接使用系统默认代码页 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)

关键步骤:

  1. GetEncoding(936) — 获取 GB2312 编码器
  2. @'...'@ — PowerShell here-string,保留原始换行
  3. 统一换行符为 CRLF
  4. WriteAllBytes — 直接写字节,不经过任何编码转换

显示风格建议

完整模板

@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 重建文件