如何在CMD批处理中使用"codepage 932"个字符? (全角斜线)

How to use "codepage 932" characters in CMD batch? (fullwidth solidus)

我正在尝试读取我的批处理文件中的文件夹名称,其中包含我收集到的 全角斜线字符 (/) 属于 代码页 932 .

我试图在我的批处理中输入 chcp 932,但控制台报告 "invalid codepage"。如何在我的批处理文件中启用此代码页?使用 cp1252 或 utf8 已证明不成功。

注意:只要实际脚本有效,我就可以接受控制台 window 显示乱码。

你能用通配符围绕它编写脚本吗?如果文件夹名为 folder/name(其中 是 Unicode 字符 0xff0f),请执行类似

的操作
for /d %%I in ("folder?name") do set "folder=%%~I"

现在您可以通过 %folder% 引用它而无需更改您的代码页。

伙计,DejaVu Sans Mono(我的控制台字体)甚至没有那个字符的字形。


有趣的是,for /F 将 Unicode solidus 转换为非扩展 /。看看这个:

如果我使用 for /f 将变量设置为 powershell "[char]0xff0f" 的输出,然后执行 if "%var%"=="/" (0x2f),它的计算结果为真。 for /f 不知何故知道 / 在视觉上相似,还是只是巧合?我不明白这怎么可能是巧合,因为 (0xff0f) 与 / (0x2f) 没有共同的字节。

嗯,最终,通过这些实验弄清楚了一件事。您不能使用 for /f "delims=" %%I in ('dir /b /a:d "folder?name"') 来填充变量,除非您 chcp 65001 将代码页更改为 Unicode。必须是 for /d.

批处理文件 .BAT 和 .CMD 在写入文件本身时只允许使用 ANSI 字符集。

另一个答案显示了如何从支持必要代码页的命令中引入 UNICODE 字符。

您可以将特殊字符存储在 UNICODE 文本文件中,并通过使用“|”、“<”或 FOR 命令将它们引入。