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