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

时间:2016-09-28 06:58:17

标签: powershell unicode encoding utf-8 robocopy

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

ROBOCOPY \\app-srv\D\DocumentFiles\2012\10\8\ \\hyper-v9\W\DocumentFiles\2012\10\8\ /IA:AO /FP /NP /E /L /V /TEE /UNILOG:myfiles.txt
ROBOCOPY \\app-srv\D\DocumentFiles\2012\10\8\ \\hyper-v9\W\DocumentFiles\2012\10\8\ /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 )。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

我在服务器2008 R2上的robocopy版本是XP027(5,1,10,1027)。我在某地读过XP026(5,2,26,26)工作正常,事实是它的工作原理应该是这样的!

  

版本XP026:包含在Microsoft Robocopy GUI

我也尝试过运行更新版本10.x(Windows 10),但它无法通过操作系统检查。