2017-06-23 19 views
1

私にはたくさんのpngファイルがありますが、そのほとんどは番号で識別されるファイル名を共有しています。したがって、たとえば、私はファイルを持っているかもしれません:ファイル名の末尾にpowershellを付けて番号を小さくする

  • file_A_01.png
  • file_A_02.png
  • file_B_1.png
  • file_B_2.png
  • はfile_C.png

残念ながら、これらのましたナンバリングシステムが1から始まり、0から始める必要があるので、ファイル名を

に変更する必要があります
  • file_A_00.png
  • file_A_01.png
  • file_B_0.png
  • file_B_1.png
  • file_C.png

(最終的なファイル名に先行ゼロの数が行うことに注意してください問題はありませんが、入力ファイル名が混在している可能性があります)。

私は、またはファイル名の一部を置き換えることはできますが、ファイル名内の数字に対して操作を行うことは何もありません。

正規表現を使用して数字を見つけて試合をキャプチャしようとしましたが、数値演算の実行方法がわかりません。

Get-ChildItem *.png |Rename-Item -NewName {$_.name -replace "([0-9]+).png",'$1.png'} 

もちろん、数字は一致していて、同じ番号で置き換えられます。私は最後に'$1'-1のようなものを持っていますが、もちろん$1は文字列です。私はそれを整数にキャストして操作を実行し、文字列にキャストして置き換えなければならないかどうかはわかりません。もしそうなら、私はそれをどうやって行うのか分かりません。

私はpowershellの完全な初心者ですから、私は直接的な意味をはっきりと説明しています。もちろん、解決策のステップについての説明は非常に高く評価されます。

答えて

1

このような何か試してください:あなたが先頭にゼロ(あなたのパスに変更A:\)を保持したい場合は

$Names = "file_A_01.png","file_A_02.png","file_B_1.png","file_B_2.png","file_C.png" 

foreach($Name in $Names){ 
    $Number = [Double]$([Regex]::Matches($Name, "\d+")).Value 
    if($Number -ne 0){ 
     $Number = $Number - 1 
     $Name = $Name -replace $([Regex]::Matches($Name, "\d+")).Value , $Number 
    } 
    $Name 
} 
+0

私の質問に完全に(非常に明確に)回答しますが、他の数字を含むファイル名を扱うためにどうすれば変更できますか?たとえば、ファイル "file_A1_01.png"があり、 "file_A1_0.png"のようなものにしたい場合 –

+0

私はこのように分割します$ Number =($ Name.Split( "_")[2])Replace( "。png"、 "")、$ Number -1の後ろに戻します – guiwhatsthat

0

を:

PushD "A:\" 
Get-ChildItem "file*_*[0-9].png" | Sort Name | ForEach-Object { 
    $Number = ($_.BaseName -split '_')[-1] 
    $Places = $Number.Length 
    If ([Int32]$Number -gt 0) { 
    $NewNum = ([Int32]$Number - 1).ToString('00000') 
    $NewNum = $NewNum.Substring($NewNum.Length-$Places) 
    $_|Rename-Item -NewName {($($_.BaseName) -Replace "$Number$","$NewNum")+$($_.Extension)} -Whatif 
    } 
} 
PopD 

出力例:

PS A:\> .\SO_44717299.ps1 
What if: Performing the operation "Rename File" on target "Item: A:\file_A_01.png Destination: A:\file_A_00.png". 
What if: Performing the operation "Rename File" on target "Item: A:\file_A_02.png Destination: A:\file_A_01.png". 
What if: Performing the operation "Rename File" on target "Item: A:\file_B_1.png Destination: A:\file_B_0.png". 
What if: Performing the operation "Rename File" on target "Item: A:\file_B_2.png Destination: A:\file_B_1.png". 
What if: Performing the operation "Rename File" on target "Item: A:\file_C_001.png Destination: A:\file_C_000.png" 

た場合を出力はOKのように見える-WhatIfの後ろに名前を変更する -

関連する問題