BAT文件中是否可以使用扩展ASCII字符?

3

我有一堆动态生成的*.BAT文件。这些BAT文件用于在服务器上创建文件夹,每个BAT文件只有一行代码,例如:MKDIR \NetworkShare\abc\123

"abc\123"字符串来自数据库。

它可以顺利地运行一段时间,按需创建数千个子文件夹,直到今天它停止了创建一个特殊的子文件夹,该子文件夹中包含“闭合单引号”(如果从dos提示符中输入,按下Alt+0146)的字符。

我做了一些研究并发现这个“闭合单引号”是扩展的ASCII字符。它不能被正确保存在ANSI BAT文件中(最终会变成其他东西)。我尝试了UNICODE和UTF-8 BAT文件,但它们都不起作用。

唯一接近的解决方案是我尝试了一个二进制编辑器来确保它是代码146,但代码146给了我Æ(ALT-146),而不是“闭合单引号”(Alt+0146)。

我知道我可以在DOS提示符中手动输入特殊字符(通过使用键盘Alt + ))。 但是,是否有一种方法可以正确地保存此“关闭单引号”(Alt + 0146)在BAT文件中,以便我可以动态执行它们?

主机系统是Windows Server 2003 US-English。


在bat文件中添加chcp 65001是否有帮助?请参见https://dev59.com/3XRC5IYBdhLWcg3wK9yV。 - Anders Lindahl
@AndersLindahl:哈!我们同时给出了相同的答案 :-) - Renaud Bompuis
我希望人们不要使用“扩展ASCII”这个词,这是没有意义的。Alt代码基于Windows代码页1252,与Unicode匹配,除了字符Ÿ - Mark Ransom
2个回答

5
感谢您提供的 CHCP 65001 技巧,它帮助解决了问题:
我按照以下步骤解决了问题:
+++++++++++++++++++
准备 BAT 文本文件(手动或动态方式)
+++++++++++++++++++
(1) 留出第一行空白(这是必要的,因为 UTF-8 文本文件中第一行有隐藏字符)
(2) 将 CHCP 65001 放在第二行
(3) 在此处输入主要指令:MKDIR \networkshare\abc(right single quote-->this is special extended ASCII char)\123
(4) 确保将 BAT 文件保存为 UTF-8 格式
+++++++++++++++++++
现在是 CMD.EXE 技巧
+++++++++++++++++++
(1) 启动 cmd.exe (2) 打开 cmd.exe 黑屏属性
(3) 确保黑屏字体是“true type”,即“TT”字体。默认情况下,它是光栅字体,无法正确处理特殊 ASCII 代码。(这是关键步骤)
(4) 现在我可以运行我的 BAT 文件并正确处理那些扩展的 ASCII 字符。

注意:上述解决方案仅适用于Windows 7和Windows 2008 R2服务器;不适用于Windows 2003服务器。在Windows 2003服务器中,CHCP 65001无法使用。 - Simon

3

尝试将批处理文件的代码页更改为UTF-8:在批处理文件的顶部插入此行并将文件保存为UTF-8:

chcp 65001

但请注意:使用非ASCII字母创建文件夹可能会破坏一些程序,这些程序可能依赖于较旧的库API,或者仅假设所有文件夹和文件名都是ASCII。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接