# test.bat
reg add "HKEY_CLASSES_ROOT\CLSID\{xxxxx-xxxx-xxxx-xxxx-xxxx}" /ve /t REG_SZ /d "中文" /f
网上说的修改批处理文件的编码为ANSI,只能解决批处理打印为中文的问题,但是写入到注册表就无效了
chcp语法会导致第三行的reg命令被吞掉,见红线处:
# test.bat
reg add "HKEY_CLASSES_ROOT\CLSID\{xxxxx-xxxx-xxxx-xxxx-xxxx}" /ve /t REG_SZ /d "中文" /f
网上说的修改批处理文件的编码为ANSI,只能解决批处理打印为中文的问题,但是写入到注册表就无效了
chcp语法会导致第三行的reg命令被吞掉,见红线处:
在批处理(Batch)文件中直接写入包含中文的注册表项时,确实可能会遇到乱码问题,这主要是因为批处理文件本身对字符编码的支持有限。尽管将批处理文件的编码改为ANSI可以在某些情况下解决显示中文的问题,但在写入注册表时,这种改变并不总是有效。
为了解决这个问题,你可以使用Windows Script Host(WSH)的JScript或VBScript来辅助你的批处理文件,因为这两种脚本语言对Unicode字符的支持更好。以下是一个使用JScript的示例,该脚本可以在批处理文件中调用,以写入包含中文的注册表项:
WriteRegValue.js
):// WriteRegValue.js
var WshShell = WScript.CreateObject("WScript.Shell");
var keyPath = "HKEY_CLASSES_ROOT\\CLSID\\{xxxxx-xxxx-xxxx-xxxx-xxxx}";
var valueName = ""; // 空字符串表示默认(无名称)值
var valueData = "中文";
WshShell.RegWrite(keyPath + "\\" + valueName, valueData, "REG_SZ");
@echo off
cscript //nologo WriteRegValue.js
echo 已写入注册表项。
pause
这种方法通过使用JScript来执行注册表操作,可以有效地绕过批处理文件在字符编码上的限制。
注意:
{xxxxx-xxxx-xxxx-xxxx-xxxx}
替换为你实际的CLSID。//nologo
参数用于在调用cscript
时隐藏其启动信息。
bat
文件使用GBK
编码保存reg add
前先执行chcp 65001 > nul
reg add
后,需要执行chcp 936 > nul
\r\n
换行