2017-06-22 16 views
3

フォルダを繰り返し処理しようとしています。それはすべてのフォルダでうまく動作しますが、そこにumautを持つディレクトリでは機能しません。ドイツ語ウムラウトin 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

はい、すべてのサブディレクトリを再帰的に取得しようとしています。完全なプログラムでは、私はその後、特定のフォルダをソートして圧縮します。私はあなたのコードが私のために働く方法を知らないが、私は最初にこのようなaproachを試みたと思うが、これらのフォルダには何百万ものファイルが含まれているため遅すぎるか失敗した。 – Gunni

+0

私は今、以下を使用します。それはdirコマンド(ペイロードなしで繰り返すためだけに2秒と20秒)よりも10倍遅いですが、それは十分速いです。 Get-ChildItem -recurse $要素-force -attributesディレクトリ| foreach { $ _。FullName } – Gunni

1

あなたは、この場合には、コンソールのホストを使用していますcmdプロンプトを、外部コマンドを砲撃しています。 Windowsでは、コンソールホストはコードページを使用しているため、PowerShellは文字を正しく認識しますが、コンソールホストはエンコードを理解していない可能性があります。

ネイティブのPowerShellを使用している場合(as in TheIncorrigible1's answer)、正常に動作するはずです。

+0

@このような小さな編集のためのTheIncorrigible1私はポスターに通知するだけです。これは修正する必要がありますが、<6文字の編集のために1人または複数の担当者に任せてください。 – Matt

+0

@Matt私はとにかく編集の通知を受ける。 「編集を改善する」ようにして、待ち行列に入るのを待つのではなく、すぐに生きられるようにしました。 – briantist

+0

文字制限を作るための余計な変更は本当にお勧めできません。 – Matt

関連する問題