2009-10-06 3 views
19

フォルダ内のすべてのjpgファイルの名前をPicture00000001.jpgのような統一的な名前に変更したいと思います。ここで、00000001はカウンタです。PowerShellを使用してファイルをループして名前を変更する方法は?

これはC#で公園内を歩くことになりますが、これはPowerShellが作成したパンやバターのようなものだと思います。

私は

$files = ls *.jpg 
$i=0 
foreach($f in $files) { Rename-Item $f -NewName "Picture"+($i++)+".jpg" } 

ような何かを推測している。しかし、私はこの上でガスを打つ前に、私は1たい)カウンターをフォーマット、および2)、これは実際にも、良い考えであることをいくつかの意味を持っています。

これは良いアイデアよりもOCDのように聞こえる場合は、話してください。

答えて

23

を取得するには、これを試してみてください:

ls *.jpg | Foreach -Begin {$i=1} ` 
    -Process {Rename-Item $_ -NewName ("Picture{0:00000000}.jpg" -f $i++) -whatif} 

あなたが」 PowerShell 2.0を使用している場合は、PowerShellが各FileInfoオブジェクトに追加するBasenameプロパティを使用してください:

ls *.jpg | Format-Table Basename 

PowerShell 1.0では、PowerShell Community Extensionsに同じBasenameプロパティが追加されています。

の意図は、この試みる名前変更操作中にファイルのベース名にカウンターの文字列を追加する場合:

ls *.jpg | Foreach {$i=1} ` 
    {Rename-Item $_ -NewName ("$($_.Basename){0:00000000#}.jpg" -f $i++) -whatif} 
+0

タイトルと質問の間で切断して申し訳ありません - 私は、タイトルを変更しましたが。 –

+0

問題はないので、私はそれに応じて私の答えを更新しました。 –

+0

ああ、 'ForEach-Object'に個別に' begin'と 'process'スクリプトブロックを与えることができますか?私はいくつかのゴルフのPE問題を再訪しなければならない。 – Joey

2

することは、かなり簡単にPowerShellでこれを行うことができますFilenameWithOutExtension

$ f.DirectoryName + "\" + $ f.BaseName

関連する問題