我尝试在 Windows 7 中使用 robocopy 来生成 Unicode 日志,因为我有包含 Unicode 字符的文件。我使用的命令是:
robocopy C:\mysource D:\mydest /mir /unilog:backup.log /tee
文件副本有效,屏幕上的输出正确,但日志文件本身只包含乱码。无论我使用命令提示符还是 Powershell,都是如此。
怎么回事?我做错什么了吗?
答案1
XP27 中存在错误。请尝试降级到 XP26。
这似乎是XP27
RoboCopy 版本(Windows 7 附带)中的一个错误。
在版本中XP26
(随 Windows Vista 提供)/UNILOG
为我生成了一个完全可读的 Unicode 日志文件。
如果你手头没有 Vista简易RoboCopy也随XP26
版本一起提供。(我实际上还没有尝试过 EasyRoboCopy 本身,只是robocopy.exe
使用 从其安装文件中提取出来WinRAR
。)
答案2
乍一看,我会说 Robocopy 在使用/UNILOG
和/TEE
开关时编写的文件包含一个 UTF-16 小端字节顺序标记,后跟一个 ISO-8859-1 终端打字稿。
为了使其可读,我在 Ubuntu 中执行以下操作:
dd if=robocopy.log ibs=1 skip=2 obs=512 | # Strip the byte order mark
iconv --from-code ISO-8859-1 --to-code UTF-8 | # Convert to UTF-8
col -b > robocopy_utf-8.log # Interpret control characters
生成的文件与我在 Windows 命令提示符中看到的一致。
答案3
查看 Win7 上的(二进制)文件输出,/UNILOG 选项毫无用处。它写入标准 UNICODE BOM(FFFE),然后继续写入所有窄字符除了对于选项行(例如 /BYTES /S /COPY:DATS ...),这是实际的 unicode。之后,它会恢复为 ANSI 字符,并且不是UTF-8,或者;即,如果路径中的文件名包含宽字符,则会将其转换为窄“?”字符。
显然微软没有兴趣修复这个问题,因为这种情况已经持续了一段时间,而且我已获得所有更新。
答案4
使用 UTF-8 代码页,然后运行 winword 转换器
如果您的文件或目录名称包含 Unicode 字符,则在发出带有参数的 Robocopy 命令之前/unilog
使用该chcp 65001
命令。(代码页65001 是 UTF-8。
一旦您获得了损坏的 Unicode 日志,只需在 MS Word 中将其打开Unicode (UTF-8)
并保存: