使用 Windows cmd.exe 和批处理 .cmd,我可以复制/xcopy/??? Unicode 文件名从 x:\* 到 y:\*

使用 Windows cmd.exe 和批处理 .cmd,我可以复制/xcopy/??? Unicode 文件名从 x:\* 到 y:\*

我想做一件非常简单的事情:复制一个文件。
Copy是一个简单(且基本)的命令。它应该很容易,但当涉及到 Unicode 文件名时,它似乎很复杂(使用English XPcmd.exe.cmd脚本)。
我已设法使用 Unicode 文件名创建了一个 .cmd 文件,如下所示

    :: To create the final .cmd script
    :: 
       set SRCE=D:\_cmd\cpp
       set DEST=H%SRCE:~1%

       cmd.exe /U /c DIR /A:-D /s /b "%SRCE%" >"SRCE.UTF16" 
       cmd.exe /U /c DIR /A:-D /s /b "%DEST%" >"DEST.UTF16" 

       ConvUTF.exe  1628 "DEST.UTF16" "DEST.UTF-8"
       ConvUTF.exe  1628 "SRCE.UTF16" "SRCE.UTF-8"

    :: Then, with `sed.exe`, `diff.exe`, and `ConvUTF.exe` again...
    :: the resulting UTF-8 (or UTF16) .cmd file looks like this...
    :: 
       copy "D:\_cmd\cpp\ā.क.test" "H:\_cmd\cpp\"  

copy当我直接在 上运行该命令时,它工作正常command prompt,但在.cmd脚本中使用时失败。UTF
-8.cmd错误输出:The system cannot find the file specified
UTF16.cmd没有通过第一个 NULL 字节(第一个字符),然后退出。

有没有办法通过.cmd脚本来做到这一点?(我想使用 shell cmd.exe
也许有一个可以从我的.cmd...调用的实用程序
,欢迎提出所有建议。

附言。为了澄清 manin 问题...我不关心 Unicode 文件名在控制台窗口中的显示方式(cmd.exe 窗口中大多数非拉丁字母都不会出现这种情况)...我只关心能够复制文件名中包含 Unicode 字母的文件-通过批处理 .cmd“脚本”

答案1

保存 UTF-8 批处理文件时,如果开头没有 BOM,则会出现错误cmd。此外,cmd对于批处理文件来说,它并不真正支持 Unicode。您应该将

chcp 65001

在批处理开始时切换到 UTF-8应该使您的 Unicode 字符能够被正确读取和处理。唯一的缺点是,即使在批处理文件退出后,此更改仍然存在,因此您只能使用 UTF-8 的 shell。如果这造成问题,您可以保存以前的代码页并在最后恢复它。

另外,将控制台字体更改为 TrueType 字体也可能会有帮助,因为已知有几个内部命令会出现光栅字体的 Unicode 问题(这就是为什么for /foverdir通常是一个愚蠢的想法的原因)。

相关内容