上ROBOCOPY日志获取Unicode文件名从PowerShell中
问题描述:
我试图创建ROBOCOPY一个日志文件,我在脚本中使用同步两个文件夹。 这些文件夹包含希腊字符的文件名。 在我的工作站的DEF代码页是希腊这两个以下命令创建一个可读的日志文件:上ROBOCOPY日志获取Unicode文件名从PowerShell中
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
并没有运气的所有变化。
Withdir
/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")
..和静像N o运气(还有chcp 65001)。
任何意见将不胜感激!
答
我的服务器2008上的ROBOCOPY版本R2是XP027(5,1,10,1027)。我在某处读到XP026(5,1,2600,26)工作正常,事实是,它的工作原理应该如此!
版XP026:包含在Microsoft的Robocopy GUI
我也曾尝试运行新的10.x版本(视窗10),但它失败的OS检查。
奇怪。你以哪种方式获得“??”或汉字或控制字符_?你的第一个'ROBOCOPY .../UNILOG:myfiles.txt'为我创建带有'UTF-16 LE'字节顺序标记的'myfiles.txt' Unicode(没有希腊语,但捷克语系统,即默认的拉丁字体/脚本)。 – JosefZ
嗨, /LOG:myfiles.txt - > 10 \ 8 \כ?אב?באוח??? ד??? ?כמ(来自ISO 8859-8记事本++) /UNILOG:myfiles.txt - >獥㉜尲〱㡜ㅜ㜰瀮晤ऊ††††瑡牴扩उ†(屏幕OK) /UNICODE |出文件myfiles.txt -Encoding UTF8 - >䴠㼿㿠㿧㼠㼿㼠㼿㼿㼿㼿㼿㼿㿧㼿㼿搮捯ऊ†† ..等 你能告诉我robocopy的版本,你必须检查一些东西? – tfonias74
'/UNILOG:myfiles.txt - >獥㉜尲〱㡜ㅜ㜰瀮晤ऊ††††瑡牴扩उ†'给我一个位senseful文本片断'上课\ 2012 \ 10 \ 8 \ 107。 pdf attrib'使用'type myfiles.txt'或使用'powershell -c $ x =''; Get-Content“myfiles.txt”-encoding byte^| ForEach-Object {$ x + = [char] $ _};在'chcp 852'或'chcp 1250'下打开'cmd'窗口的$ x';也许你会在希腊代码页“chcp 737”或“chcp 1253”下尝试。然后,强制在记事本++中打开正确的编码。我的'robocopy'是ResourceHacker的''ProductVersion',“6.3.9600.17415”'windows 8.1 64bit English。 – JosefZ