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
Post a Comment