PowerShell中的德语umlauts。遍历目录无法工作。

3
我正在尝试遍历一个文件夹。对于所有的文件夹都有效,但是对于包含umlauts的目录却无法正常工作。 以下脚本展示了问题所在:
$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

如果我试图使用这些名称进行操作,它将无法找到文件夹。有什么办法可以使这个与umlauts一起工作吗?

2个回答

2

您是否试图获取D:\XLS_Abrufe-ÜNB中的所有目录?根据我的经验,cmd不太擅长处理Unicode。

$source= @("D:\XLS_Abrufe-ÜNB")
Get-ChildItem $source -force |
  Where-Object { $_.IsPSContainer } |
  $_

是的,我尝试递归获取所有子目录。在完整的程序中,我会对特定文件夹进行排序和压缩。我不知道如何让你的代码适用于我,但我认为我在开始时尝试了这样的方法,但速度太慢,或者因为这些文件夹包含数百万个文件而失败了。 - Gunni
好的。我现在使用以下命令。它比dir命令慢十倍(仅迭代而无有效负载需要2秒与20秒),但已经足够快了。Get-ChildItem -recurse $element -force -attributes Directory | foreach {
$_.FullName }
- Gunni

1
你正在执行一个外部命令,例如 cmd 提示符,它使用控制台主机。在 Windows 中,控制台主机仍然使用代码页,因此虽然 PowerShell 可以很好地理解字符,但控制台主机可能无法理解编码。
如果您完全使用原生 PowerShell(TheIncorrigible1的回答中所述),那么应该可以正常工作。

@TheIncorrigible1对于这样一个小的修改,我会通知发布者。它应该被修复,但是对于<6个字符的编辑,留给op或具有更多声誉的用户来完成。 - Matt
@Matt 我会收到编辑通知的;而且我进行了“改进编辑”,这样我就可以立即使其生效,而不必等待它通过队列。 - briantist
我理解这一点,但为了达到字符限制而进行的多余更改并不是一个明智的选择。 - Matt
1
@Matt 我同意;最好只通知我,避免排队。 - briantist
我是SO的新手,不太熟悉。以后我会直接通知的。 - Maximilian Burszley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接