使用 Rename-Item 使数字标识符和名称保持一致



我有几千个这样分隔的文件名:

Last, First-000000-Title-MonYYYY.pdf

问题1:有些文件符合6位约定,而其他文件需要前导零以保持一致性。

问题2:有些名字是用破折号输入的(有问题的是,破折号是分隔符),它们需要这样连接:Last-Last, First> LastLast, First

我能够为每个文件执行一个简单的Rename-Item函数,但不能创建一个更广泛的Get-ChildItem函数,考虑到文件名的多次迭代,以生成一致的输出。

为这个入门级的问题道歉,但我似乎无法连贯地将所需的功能画在一起。

根据你的解释:

Set-Location -Path "C:path" # replace this with actual path to where the files are
$cFiles = Get-ChildItem -Filter "*.pdf" # Getting all PDFs in the folder
foreach ($oFile in $cFiles) {
    $sName = $oFile.Name
    # This regex captures 1-5 digits number between two dashes.
    $sPattern = '(?:(?<=-))(d{1,5})(?:(?=-))'
    if ($sName -match $sPattern) {
        # Extracting number.
        [UInt32]$iNumber = $sName -replace (".*" + $sPattern + ".*"), '$1'
        # Padding number with zeros.
        $sNumber = "{0:D6}" -f $iNumber
        # Updating filename string.
        $sName = $sName -replace $sPattern, $sNumber
    } else {
        # This regex captures 6 digits number between two dashes.
        $sPattern = '.*-(d{6})-.*'
        # Extracting number.
        $sNumber = $sName -replace $sPattern, '$1'
    }
    # Splitting filename string on 6 digits number.
    $cParts = $sName -split $sNumber
    # Removing dashes from first/last names and re-assembling filename string.
    $sName = ($cParts[0] -replace '-') + '-' + $sNumber + $cParts[1]
    Rename-Item -Path $oFile.Name -NewName $sName
}

在以下样品上测试:

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

如果有更复杂的情况

最新更新