0

私はpowershellが初めてです。作成した関数を呼び出していますが、2 つのパラメーターをさらにいくつかに分割しています。計算されたパラメーターが渡される前に実際に計算されるようにするにはどうすればよいですか?

dir -Recurse -Path $source | foreach {MoveFile $_.FullName ($destination + "\" + $_.Extension.Substring(1, ($_.Extension.Length - 1))) }

それはこの部分です:

($destination + "\" + $_.Extension.Substring(1, ($_.Extension.Length - 1))

それには問題があります。計算するのではなく、分離します。私は何を間違っていますか?

4

1 に答える 1

1

引数式を括弧に入れて正しく実行しています。私のマシンでそのスニペットを Copy-Item で使用すると、問題なく動作します。MoveFile 関数がどのように見えるかを示す必要がある場合があります。あなたの場合、$_.Extension が $null と評価されている可能性があります。拡張子を持つファイルをフィルタリングしているようには見えません。

ところで、組み込みの Move-Item を使用すると、これを次のように単純化できます。

dir $source -r *.* | Move-Item -Dest {"$destination\$($_.Extension.Substring(1))"}

String.Substring開始インデックスのみを取得し、そのポイントから最後までの残りの文字列を提供する のオーバーロードがあります。したがって、文字列の残りの長さを指定する必要はありません。

于 2012-11-29T18:13:46.543 に答える