2017-06-22 55 views
3

我想遍历一个文件夹。它适用于所有文件夹,但不适用于包含umauts的目录。 下面的脚本说明是什么问题:德国变音器在PowerShell中。遍历目录不起作用

$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 

如果我尝试用这些名字上下工夫,也不会找到的文件夹。 任何想法如何与变音器一起工作?

回答

2

您是否试图获得D:\XLS_Abrufe-ÜNB内的所有目录?根据我的经验,cmd不能很好地处理unicode。

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

是的,我试图让所有子目录递归。在完整的程序中,我会对特殊文件夹进行排序和压缩。我不知道如何让你的代码适合我,但我认为我一开始就试过这样的问题,但速度太慢或失败,因为这些文件夹包含数百万个文件。 – Gunni

+0

好的。我现在使用以下。它比dir命令慢了10倍(2秒和20秒仅仅用于无负载迭代),但速度足够快。 Get-ChildItem -recurse $ element -force -attributes目录| foreach {____。FullName } – Gunni

1

你是炮击了一个外部命令,在这种情况下,cmd提示,使用控制台主机。在Windows中,控制台主机仍然使用代码页,所以虽然PowerShell能够理解字符,但控制台主机可能不理解编码。

如果您一直使用本地PowerShell(as in TheIncorrigible1's answer)它应该工作得很好。

+0

@TheIncorrigible1对于这样一个小的编辑,我只是​​通知海报。它应该是固定的,但留给操作人员或更多代表<6个字符编辑的用户。 – Matt

+0

@Matt无论如何,我都会收到编辑的通知;我做了“改进编辑”,这样我就可以立即生活,而不是等待它排队等候。 – briantist

+0

我明白,但是多余的更改,使字符限制不是真的建议 – Matt