我正在尝试迭代一个文件夹。它适用于所有文件夹,但不适用于包含umauts的目录。 以下脚本显示了问题所在:
$source= @("D:\XLS_Abrufe-ÜNB")
foreach ($element in $source) {
$element
cmd /c dir /ad /b /s $element |foreach{
$_
}
}
输出:
D:\XLS_Abrufe-ÜNB
D:\XLS_Abrufe-šNB\2015
D:\XLS_Abrufe-šNB\2016
D:\XLS_Abrufe-šNB\2017
如果我尝试使用这些名称,它将找不到文件夹。 任何想法如何与变音符号一起使用?
答案 0 :(得分:2)
您是否想要获取D:\XLS_Abrufe-ÜNB
中的所有目录?根据我的经验,cmd不能很好地处理unicode。
$source= @("D:\XLS_Abrufe-ÜNB")
Get-ChildItem $source -force |
Where-Object { $_.IsPSContainer } |
$_
答案 1 :(得分:1)
你正在炮轰一个外部命令,在这种情况下是cmd
提示符,它使用控制台主机。在Windows中,控制台主机仍然使用代码页,因此虽然PowerShell很好地理解了该字符,但控制台主机可能不了解编码。
如果您一直使用本机PowerShell(as in TheIncorrigible1's answer),它应该可以正常工作。