如何使用"代码页932" CMD批次中的字符? (全宽固体)

时间:2016-02-04 22:01:25

标签: windows batch-file cmd codepages

我正在尝试在我的批处理文件中读取包含全宽固体字符(/)的文件夹名称,我收集的文件名属于代码页932

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

注意:只要实际脚本有效,我就可以在控制台窗口显示乱码文本。

2 个答案:

答案 0 :(得分:2)

你可以使用通配符编写脚本吗?如果文件夹名为folder/name(其中是Unicode char 0xff0f),请执行类似

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

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

Man,DejaVu Sans Mono(我的控制台字体)甚至没有该字符的字形。

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

fullwidth solidus tests

如果我使用for /f将变量设置为powershell "[char]0xff0f"的输出然后执行if "%var%"=="/"(0x2f),则计算结果为true。 for /f以某种方式知道 / / 在视觉上是否相似,或者只是巧合?我不明白它是如何巧合,因为 / (0xff0f)没有与 / (0x2f)共有的字节。

嗯,最终,这些实验证明了一件事。除非for /f "delims=" %%I in ('dir /b /a:d "folder?name"')将代码页更改为Unicode,否则无法使用chcp 65001填充变量。它必须是for /d

答案 1 :(得分:0)

批处理文件.BAT和.CMD在编写文件时只允许ANSI字符集。

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

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