根本原因是bat文件编码与cmd默认ansi(gbk)解析不匹配;应将utf-8编码的bat文件用记事本另存为ansi,或用notepad++转为ansi,或在脚本首行加@chcp 936 >nul,亦可修改注册表使记事本新建文件默认ansi编码。

电脑运行批处理BAT文件时中文显示为方块、问号或错位符号,根本原因是文件编码与cmd解释器默认读取方式不匹配——记事本用UTF-8打开却让cmd按ANSI(GBK)字节流执行,导致每个中文被拆成两个乱码字节。
用记事本另存为ANSI编码(最常用)
右键点击.bat文件 → 选择“编辑” → 等待记事本完全加载内容(若已显示乱码,说明当前就是UTF-8编码)。
点击【文件】→【另存为】→ 在对话框底部找到“编码”下拉菜单 → 必须手动选择“ANSI”(不是默认选项,常被忽略)。
重新输入原文件名(如run.bat),确保扩展名仍是.bat → 点击“保存”。这一步会覆盖原文件,原始UTF-8内容将被转为系统代码页936(GBK)字节序列。
双击运行新保存的文件,中文注释、echo输出、路径名全部恢复正常。注意:如果原文件含BOM(EF BB BF开头),记事本另存为ANSI会自动剥离BOM,避免@echo被识别为非法命令。
用Notepad++批量转码(适合多个文件)
方法一:单文件转换
用Notepad++打开乱码.bat → 顶部菜单栏点击【编码】→【转为ANSI】→ 【文件】→【保存】。
方法二:多文件批量处理
打开Notepad++ → 【文件】→【批量替换】→ 点击左下角【打开文件夹】图标 → 选中存放所有.bat文件的文件夹 → 勾选【包含子文件夹】。
在【查找目标】留空 → 【替换为】留空 → 【搜索模式】选“普通” → 点击【全部替换】按钮右侧小箭头 → 选择【全部转换为ANSI编码】。
这一步不会改动任何文字内容,只重写文件字节流。完成后所有.bat文件都已适配cmd原生解析逻辑。
在脚本开头强制切换代码页(补充方案)
第一步:确认当前控制台默认代码页
打开cmd → 输入chcp → 回车 → 记下输出数字(中文系统通常为936,英文系统为437)。
第二步:修改BAT脚本头部
在@echo off下方紧接一行:@chcp 936 >nul(中文Windows)或@chcp 65001 >nul(需配合UTF-8无BOM文件)。
⚠️注意:如果文件本身是UTF-8 with BOM保存的,加chcp 65001仍会报错,因为BOM会被cmd当作非法首字符;必须先删BOM或改存为UTF-8无BOM,再加chcp命令。
第三步:验证效果
保存后双击运行,观察echo中文是否清晰显示。若仍乱码,说明编码未真正对齐,应退回第一种方法优先转ANSI。
永久修改记事本默认编码(一劳永逸)
按Win+R → 输入regedit → 回车 → 导航至HKEY_CURRENT_USER\Software\Microsoft\Notepad。
右键空白处 → 新建 → DWORD (32位)值 → 命名为iDefaultEncoding → 双击该值,将数值数据改为1 → 点击确定。
关闭注册表编辑器 → 重启记事本 → 新建文本文件后,【另存为】对话框中“编码”默认即为ANSI,无需每次手动切换。
此设置不影响已有文件,仅对新建文件生效。后续所有手写.bat脚本,只要用记事本新建并保存,天然适配cmd执行环境。











