2011-04-07 15 views
13

私はRegexを学んでいますが、次のファイルの名前を変更する方法はまだわかりません。手伝って頂けますか。Regex/Powershellを使ってファイルの名前を変更する

私はPowershellを使ってファイルの名前を変更するのは本当に便利で、Regexを受け入れることができます。

filename__Accelerated_C ____ Practical_Programming_by_Example.chm - Example.chmによって>C実践プログラミング

filename__Python_Essential_Reference__2nd_Edition_.pdf - >Pythonのエッセンシャル・リファレンス第二Edition.pdf

filename__Text_Processing_in_Python .CHM - 私も、私がほとんどを使用して楽しんでいくつかの無料のオンライン正規表現ツールを含むてる

Python.chm中>テキスト処理は、他の人に役に立つかもしれません。

http://gskinner.com/RegExr/

http://www.rubular.com/

とチートシート

http://krijnhoetmer.nl/stuff/regex/cheat-sheet/

+0

私は正規表現の専門家だ、私は朝食のためにあなたのリンクの作成者を食べます! – sln

+0

最初のものは** Accelerated C++ Practical Programming by Example ** imhoでなければなりません。 – YOU

答えて

13

これは動作するはずです:

にオブジェクトIちょうどパイプが、本当に(別名が %ある) Foreach-Object経由でそれを行うために必要とされていない

Get-ChildItem directory | Rename-Item -NewName { $_.Name -replace '^filename_+','' -replace '_+',' ' } 

注:

ls | %{ ren $_ $(($_.name -replace '^filename_+','') -replace '_+',' ') } 
+1

2番目のパラメータで '$'を使う理由。私はこれもうまく動作しています: 'ls | –

+1

私のコメントを忘れました、ファイル拡張子の前の最後のスペースを切り捨てるのに$が必要です:) 。あなたの正規表現は完璧に動作します! –

+0

他の誰かが同じ問題を抱えている場合:何らかの理由でforeach-blockを使用して「アイテムが存在しないため名前を変更できません」というエラーが発生した場合は、-newNameの引数としてscript-blockを使用してみてください。ユーザー@stejの答え(私のために働く)。なぜこの違いがあるのか​​理解できません。多分誰かがアイデアを持っていますか? – gimpf

0

これを試してみてください:

$filename = $filename -creplace '_+\.', '.' 
$filename = $filename -creplace '_+', ' ' 
23

は、このいずれかを試してみてください。

アップデートは

私はscriptblocksと '魔法' について文書化されていない何かを持っています。私の記憶が正しければプロパティがValueFromPipelineByPropertyName=$trueであれば、それは使用することができます。

function x{ 
    param(
     [Parameter(ValueFromPipeline=$true)]$o, 
     [Parameter(ValueFromPipelineByPropertyName=$true)][string]$prefix) 
    process { 
     write-host $prefix $o 
    } 
} 
gci d:\ | select -fir 10 | x -prefix { $_.LastWriteTime } 
+1

Woohoo。不要な 'Foreach'パイプライン段階を排除するため+1。 :-) –

+0

ちょっと涼しい。ドキュメントでは、スクリプトブロックをパラメタとして使用できるとは言いません。これは他の多くのコマンドレットの機能ですか? – zdan

+0

@zdan、どこに文書化されているのかわかりません。多分それをブログで見つけました。誰もこれまでに答えていない(Twitterの質問)。私の編集された答えを見てください。 – stej

関連する問題