Saber 酱的抱枕

Fly me to the moon

07/24
2025
软件

在 Windows 上使用 bat 和 PowerShell 脚本的编码问题

最近我让 AI 帮写了一些脚本,都是和文件操作有关的。前段时间写了个 ps 脚本,刚才又写了个 bat 脚本,都因为编码问题踩了坑。

bat 脚本需要用记事本保存为 ANSI 编码,不能使用 UTF-8,否则会导致脚本内容解析错误而无法运行。
而且还有个坑:我的系统是 Windows 11 简体中文版,AI 说 ANSI 编码在简体中文系统中对应 GBK/GB18030,但我在 VSCode 里保存成这两种编码依然报错,最后只能用记事本保存为 ANSI 编码的才能正常运行。

PowerShell 5.1 脚本需要保存为 UTF-8 with BOM 编码,不带 BOM 不行。

更新:PowerShell 有个开源版本(PowerShell 7),它是需要独立安装的,也是独立运行的(与 Windows 自带的 PowerShell 5.1 并存)。它的脚本后缀名也是 .ps1,但是不需要带 BOM,不会因为编码问题踩坑了。而且 PS 7 对路径、文件名里的中文支持更好,我现在已经用它替代了 PS 5.1。

在 Windows 上使用 bat 和 PowerShell 脚本的编码问题

  1. 阿巴阿巴
    Google Chrome 118Google Chrome 118Windows 10/11Windows 10/11

    这个坑我也踩过,windows控制面板里 时钟和区域 - 区域 - 管理 - 非 Unicode 程序的语言 - 更改系统区域设置
    如果勾选 Beta版:使用 Unicode UTF-8 提供全球语言支持
    那么命令行默认的编码就是UTF-8,否则就是GBK
    也可以用chcp 65001手动指定当前命令行(批处理文件)使用UTF-8编码

    回复
  2. locationiskey
    Google Chrome 138Google Chrome 138Windows 10/11Windows 10/11

    windows的命令行东西太烦,建议直接python
    反正都vibe coding,自己会不会无所谓

    回复
    1. saber 文章作者
      Google Chrome 138Google Chrome 138Windows 10/11Windows 10/11

      确实,不过使用 shell 命令的话系统脚本会更简单直接,而且 bat 和 ps 脚本可以双击运行。py 脚本需要通过命令行运行,或者把打开方式设置为 python.exe,没那么方便。

      回复
    2. saber 文章作者
      Google Chrome 146Google Chrome 146Windows 10/11Windows 10/11

      我今天才知道有个 PowerShell 7,编码用纯 UTF-8 就行,不用带 BOM,而且对中文字符、路径的支持更好,已经用上了🤓

      回复