我正在尝试在我的批处理文件中读取包含全宽固体字符(/)的文件夹名称,我收集的文件名属于代码页932 。
我尝试将chcp 932输入到我的批处理中,但控制台报告"无效的代码页"。如何在批处理文件中启用此代码页?使用cp1252或utf8已被证明是不成功的。
注意:只要实际脚本有效,我就可以在控制台窗口显示乱码文本。
答案 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转换为非扩展 / 。看看这个:
如果我使用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命令将它们带入。