如何使用PowerShell在关键字符之前向一批文件名添加前导零

时间:2017-01-03 13:09:32

标签: windows powershell

我正在尝试在下划线之前将前导零添加到一批文件名中。

例如:从123_ABC.pdf转到000123_ABC.pdf

目标是在下划线之前应该有6个数字,因此我需要添加前导零。

之前我已经做过这样的事情,我需要将前导零添加到纯数字的文件名,这是下面的代码,但我不知道如何使其适应上面的场景。

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

任何帮助都会非常感激。 感谢

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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  
} 
相关问题