2017-10-06 16 views
0

私は、このフォルダ構造を持っPowerShellの名前を変更する特別なディレクトリを再帰的に

C:\ Users \ユーザーmyuserのデスクトップと呼ばれるフォルダを含む \

  • BL-100
  • BL-105
  • BL-108

など... ほとんどのBL-フォルダにはfile.xml、bすべてではない。

したがって、デスクトップでは、BLで始まるフォルダが多く、そのほとんどではなくすべてがfile.xmlを格納しています。

今、私は現時点ではBL-で開始しているすべてのフォルダを検索し、file.xmlを保存し、

にそうRG-100、RG-105、RG-108とにそれらのフォルダの名前を変更したいですこのスクリプトを得た:

foreach($Directory in Get-ChildItem -Path C:\Users\myUser\Desktop -Recurse | Where-Object{($_.Name.Substring(0,3) -eq 'BL-')}){ 

} 

これは動作しません、私にエラーを示している。例外は、「2」の引数(複数可)と「サブストリング」を呼び出す:「インデックスおよび長さは文字列内の場所を参照しなければなりません。パラメータ名:長さ "

誰でもお手伝いできますか?

+1

'$ _ 'BL - *' 様名前'。。注:操作を完了できない場合、部分文字列が失敗することがあります。例えば'' 1 '。Substring(0,2) '。 – JohnLBevan

+1

@johnコメント(これは答えです)に加えて、このエラーの原因を理解するには、 "AB"という名前のフォルダ(2文字のみ)で何が起こるか考えてください。今は 'length'パラメータが範囲外です(文字列は長さが2文字で、3文字を要求しています) –

+1

これはうまくいきました。 –

答えて

1

表示されるエラーは、何らかの理由でSubStringが失敗するためです。最も可能性の高い理由は、文字列の長さが十分でない場合です。例えば1文字の長い名前のフォルダがある場合私が何を意味するかを見るには、実行してみてください:'1'.Substring(0,2)

これを回避するには、代わりにlike演算子を使用できます。例えば

foreach($Directory in (
    Get-ChildItem -LiteralPath 'C:\Users\myUser\Desktop' -Recurse ` 
    | Where-Object{($_.Name -like 'BL-*')} 
)){ 
    #... 
} 
0

ちょうどそれを実行します。

Get-ChildItem "C:\Users\myuser\Desktop" -directory -Filter "BL-*" 
関連する問題