从 powershell 获取 robocopy 日志上的 Unicode 文件名

Get Unicode filenames on robocopy log from powershell

我正在尝试从我在脚本中使用的 robocopy 创建一个日志文件来同步两个文件夹。 这些文件夹包含带有希腊字符的文件名。 在我的 def 代码页是希腊语的工作站中,以下两个命令都创建了一个可读的日志文件:

ROBOCOPY \app-srv\D\DocumentFiles12\ \hyper-v9\W\DocumentFiles12\ /IA:AO /FP /NP /E /L /V /TEE /UNILOG:myfiles.txt
ROBOCOPY \app-srv\D\DocumentFiles12\ \hyper-v9\W\DocumentFiles12\ /IA:AO /FP /NP /E /L /V | Tee-Object myfiles.txt

在我想要的服务器(US-EN 代码页)上 运行 我得到“??”或汉字或控制字符(各种测试..)

我尝试了 /LOG:myfiles.txt, /UNICODE /LOG:myfiles.txt, /UNICODE /UNILOG:myfiles.txt, | Out-File myfiles.txt -Encoding utf8, | Out-File myfiles.txt -Encoding unicode 和所有变体,但没有成功。

dir/ls 我可以看到文件正确。

PC:

PS C:\tmp> $OutputEncoding

IsSingleByte      : True
BodyName          : us-ascii
EncodingName      : US-ASCII
HeaderName        : us-ascii
WebName           : us-ascii
WindowsCodePage   : 1252
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 20127

PS C:\tmp> [Console]::OutputEncoding

IsSingleByte      : True
BodyName          : ibm737
EncodingName      : Greek (DOS)
HeaderName        : ibm737
WebName           : ibm737
WindowsCodePage   : 1253
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : False
IsMailNewsSave    : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 737

服务器:

PS C:\sw> $OutputEncoding

IsSingleByte      : True
BodyName          : us-ascii
EncodingName      : US-ASCII
HeaderName        : us-ascii
WebName           : us-ascii
WindowsCodePage   : 1252
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : True
IsMailNewsSave    : True
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 20127

PS C:\sw> [Console]::OutputEncoding

IsSingleByte      : True
BodyName          : IBM437
EncodingName      : OEM United States
HeaderName        : IBM437
WebName           : IBM437
WindowsCodePage   : 1252
IsBrowserDisplay  : False
IsBrowserSave     : False
IsMailNewsDisplay : False
IsMailNewsSave    : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 437

我什至尝试修改控制台编码:

[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("IBM737")

..仍然没有运气(还有 chcp 65001)。

如有任何建议,我们将不胜感激!

我在服务器 2008 R2 上的 robocopy 版本是 XP027 (5, 1, 10, 1027)。我在某处读到 XP026 (5, 1, 2600, 26) 工作正常,事实是它可以正常工作!

Version XP026: included in Microsoft Robocopy GUI

我也试过 运行 较新的版本 10.x (windows 10) 但是 OS 检查失败。