我有一堆动态创建的 *.BAT 文件。这些 BAT 文件用于在服务器中创建文件夹。每个BAT文件只有一行,如:MKDIR \NetworkShare bcS
这个“abcS”字符串来自数据库。
它运行一段时间可以按需创建数千个子文件夹,直到今天它停止创建一个特殊的子文件夹,该子文件夹在字符串中有一个“关闭单引号”(Alt + 0146 如果从 dos 提示符键入)。
我做了一些研究,发现这个“关闭单引号”是一个扩展的ASCII字符。它无法正确保存在 ANSI BAT 文件中(最终以其他形式保存)。我尝试了 UNICODE 和 UTF-8 BAT 文件,但它不起作用。
唯一接近关闭的解决方案是我尝试了一个二进制编辑器来确保它是代码 146,但是代码 146 给我 Æ (ALT-146) 而不是“关闭单引号”(Alt + 0146)。
我知道我可以在 DOS 提示符下手动输入特殊字符(使用键盘 Alt + )。 但是有没有办法在 BAT 文件中正确保存这个“关闭单引号”(Alt + 0146)以便我可以动态执行它们?
主机系统为Windows Server 2003 US-English。
感谢您的CHCP 65001技巧。它导致适当的解决方案:
我采取了以下步骤来解决问题:
+++++++++++++++++++
准备 BAT 文本文件(手动或动态)
+++++++++++++++++++
(1) 将第一行留空(这是必须的,因为UTF-8文本文件的第一行有隐藏字符)
(2) 将CHCP 65001作为二线
(3)主线在这里:MKDIR etworkshare bc(右单引号-->这是特殊的扩展 ASCII 字符)S
(4) 确保BAT文件保存为UTF-8
+++++++++++++++++++
现在是CMD.EXE技巧
+++++++++++++++++++
(1) 启动cmd.exe
(2)打开cmd.exe黑屏属性
(3) 确保黑屏字体是“true type”即“TT”之类的。默认为光栅字体,无法正确处理特殊ascii码。 (这是关键步骤)
(4) 现在我可以运行我的 BAT 来正确处理那些扩展的 ASCII 字符了。
尝试将批处理文件的代码页更改为 UTF-8:将此行插入批处理文件的顶部并将文件另存为 UTF-8:
chcp 65001
不过要小心:使用非 ASCII 字母创建文件夹可能会破坏一些可能依赖旧的库 API 的程序,或者假设所有文件夹和文件名都是 ASCII。