2017-01-03 15 views
0

先頭にゼロを付けて、アンダースコアの前にファイル名のバッチに追加しようとしています。 000123_ABC.pdfpowershellを使用してキー文字の前にファイル名のバッチに先頭のゼロを追加する方法

目標に123_ABC.pdfから行く

例えばは:アンダースコアの前に6つの数字がなければならないということである、と私はそのため先行ゼロを追加する必要があります。

純粋な数字であるファイル名に先頭のゼロを追加する必要がある場合はこれを前に行いましたが、これは下のコードですが、上記のシナリオにどのように適応させるかはわかりません。

Get-ChildItem "[Folder Location]" | ForEach-Object { 
    $NewName = "{0:d6}$($_.Extension)" -f [int]$_.BaseName 
    Rename-Item $_.FullName $NewName 
} 

ご協力いただければ幸いです。 おかげ

+0

先頭に数字がない場合、6 0を追加する必要がありますか?あるいは、新しい名前は常に '000oldname'となるでしょうか? – sodawillow

+0

ファイル名が例:_ABC.pdfの場合は、000000_ABC.pdfに変更します。アンダースコアがなければ、さらに明確な意味で – steveWB

+0

というアクションがない場合は、理想的には1つ以上のアンダースコアがある場合は最初のアンダースコアのみを調べるべきです。 – steveWB

答えて

0

は、ここでは、あなたの仕様に応じて、新しいファイル名を取得することができます方法は次のとおりです。

$input = "123_ABC.pdf","_ABC.pdf", "qksdcfg.pdf", "0140ABC.pdf", "014_0_ABC.pdf" 

foreach($filename in $input) { 

    # split on first underscore 
    $parts = $filename -split "_",2 

    # if there are more than 1 parts (= there is an underscore in the filename) 
    if($parts.Count -gt 1) { 

     # add leading 0's and join with the file name remainder 
     "{0:d6}_{1}" -f [int]$parts[0], $parts[1] 
    } else { 
     $filename 
    } 
} 

出力は次のとおりです。

あなたのコードが混在し
000123_ABC.pdf 
000000_ABC.pdf 
qksdcfg.pdf 
0140ABC.pdf 
000014_0_ABC.pdf 

Get-ChildItem "[Folder Location]" | ForEach-Object { 
    $parts = $_.Name -split "_",2 
    if($parts.Count -gt 1) { 
     $NewName = "{0:d6}_{1}" -f [int]$parts[0], $parts[1] 
    } else { 
     $NewName = $_.Name 
    } 
    Rename-Item $_.FullName $NewName 
} 
0

試してみますこのようなもの

Get-ChildItem "c:\temp\*.pdf" -file -filter "*_*" | %{ 
    $Array=$_.Name.Split('_') 
    $NewName="{0:d6}_{1}" -f [int]$Array[0], ($Array[1..($Array.Length -1)] -join '_') 
    Rename-Item $_.FullName -NewName $NewName 
} 
関連する問題