powershell - Using Rename-Item to make numeric identifiers & names consistent -


i have several thousand file names delimited such:

last, first-000000-title-monyyyy.pdf 

probem 1: files conform 6-digit convention while others need leading zeroes consistency.

problem 2: names entered dashes (which are, problematically, delimiters) need joined such: last-last, first > lastlast, first

i'm able perform simple rename-item function each file have not been able create broader get-childitem function taking account several iterations of file names generate consistent output.

apologies entry-level question cannot seem coherently draw required functions.

based on explanations:

set-location -path "c:\path" # replace actual path files  $cfiles = get-childitem -filter "*.pdf" # getting pdfs in folder  foreach ($ofile in $cfiles) {     $sname = $ofile.name     # regex captures 1-5 digits number between 2 dashes.     $spattern = '(?:(?<=-))(\d{1,5})(?:(?=-))'     if ($sname -match $spattern) {         # extracting number.         [uint32]$inumber = $sname -replace (".*" + $spattern + ".*"), '$1'         # padding number zeros.         $snumber = "{0:d6}" -f $inumber         # updating filename string.         $sname = $sname -replace $spattern, $snumber     } else {         # regex captures 6 digits number between 2 dashes.         $spattern = '.*-(\d{6})-.*'         # extracting number.         $snumber = $sname -replace $spattern, '$1'     }      # splitting filename string on 6 digits number.     $cparts = $sname -split $snumber     # removing dashes first/last names , re-assembling filename string.     $sname = ($cparts[0] -replace '-') + '-' + $snumber + $cparts[1]      rename-item -path $ofile.name -newname $sname } 

tested on following sample:

last, first-000000-title-jan1900.pdf one-two, three-123-title-feb2000.pdf four, five-six-456-title-mar2010.pdf seven-eight, nine-ten-7890-title-sep2012.pdf 

may not work if there more complicated cases.


Comments