2009-08-05 9 views
3

ファイルペアがいっぱいのディレクトリがあります。各ファイルのペアはmp3とcdg(カラオケファイル!)の拡張子と同じ名前です。私は限り得ているpowershellのリストの各要素に対して関数を実行します。

なしの拡張子を持つすべての異なるファイル名のリストを取得するにはPowerShellを使用したいと思います:

dir -recurse -filter "*.mp3" | select-object Name | sort 

しかし、私は非常にそれぞれの名前を渡す方法を見つけ出すことはできません[System.IO.Path] :: GetFileNameWithoutExtension

どうすればよいですか?

答えて

6

あなたが探しているのは、for-each(%)フィルタです(フィルターかコマンドレットかどうかは正確には分かりませんが、使用法は同じです)。

dir -recurse -filter "*.mp3" | 
    %{ $_.Name } | 
    %{ [IO::Path]::GetFileNameWithoutExtension($_) } | 
    sort 

EDIT更新

を試してみて、私は "%{ $_.Name}" に "select-object Name" から私の答えを変更しました。前者は基本的にパイプライン値からNameプロパティを取り除き、指定された名前の単一のプロパティを持つ新しいオブジェクトを元のオブジェクトの値と共に作成します。後者は、パイプラインのすべての値を処理し、$_.Nameの実行結果をパイプラインに渡します。

+0

それは動作しますが、それは私に何かを与える:@ {Name = Mr Bungle - Backstrokin ' - @ {Name = part? b)私はちょうど何をやったのですか? –

+0

@George、私は@Name部分を取り除くために私の答えを更新しました。私はなぜそれが起こるかについての応答を追加します – JaredPar

+0

素晴らしい、ありがとう –

2

いつも%{$ _。foo}と入力したくない場合は、Get-PropertyValue(エイリアス:gpv)をPSCXから試してみてください。適切オタクのためにここに

もっと黙想:http://richardberg.net/blog/?p=55

4

DIR -recurse -filter "* .MP3" |式{{[System.IO.Path] :: GetFileNameWithoutExtension($ _。Name)}}}を選択します。ソート

+1

+1。多くの人がselectの "ハッシュテーブル構文"を忘れる。それはとても醜いです。 select @ {Name = {some-expression}、Path = {some-otherexpressions}}と書くのがはるかにいいでしょう。 –

+0

リチャードとの合意。 – JasonMArcher

2

今のPowerShell v2はRTMdであることを、あなたはベース名メンバーを選択することができます。

DIR -recurse -filter * .MP3 | [BaseName]を選択します。ソート

関連する問題