从 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 检查失败。
我正在尝试从我在脚本中使用的 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 检查失败。