3

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

这个“abc\123”字符串来自数据库。

它可以运行一段时间以按需创建数千个子文件夹,直到今天它停止创建一个特殊的子文件夹,该文件夹在字符串中具有“关闭单引号”( Alt+如果从 dos 提示符键入)。0146

我做了一些研究,发现这个“关闭单引号”是一个扩展的 ASCII 字符。它无法正确保存在 ANSI BAT 文件中(以其他方式结束)。我尝试了 UNICODE 和 UTF-8 BAT 文件,但它不起作用。

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

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

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

4

2 回答 2

5

感谢您提供这个CHCP 65001技巧。它导致适当的解决方案:

我采取了以下步骤来解决问题:

+++++++++++++++++++++

准备 BAT 文本文件(手动或动态)

+++++++++++++++++++++

(1) 将第一行设为空白(这是必须的,因为 UTF-8 文本文件的第一行有隐藏字符)

(2) 将 CHCP 65001 作为第二行

(3) 这里的主线:MKDIR \networkshare\abc(右单引号-->this is special extended ASCII char)\123

(4)确保BAT文件保存为UTF-8

+++++++++++++++++++++

现在是 CMD.EXE 技巧

+++++++++++++++++++++

(1) 启动cmd.exe

(2)打开cmd.exe黑屏属性

(3)确保黑屏字体是“真型”即“TT”之类的。默认为光栅字体,不能正确处理特殊的ASCII码。(这是关键步骤)

(4) 现在我可以运行我的 BAT 来正确处理那些扩展的 ASCII 字符。

于 2012-03-24T18:49:00.717 回答
3

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

chcp 65001

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

于 2012-03-24T05:54:40.213 回答