我正在尝试在下划线之前将前导零添加到一批文件名中。
例如:从123_ABC.pdf转到000123_ABC.pdf
目标是在下划线之前应该有6个数字,因此我需要添加前导零。
之前我已经做过这样的事情,我需要将前导零添加到纯数字的文件名,这是下面的代码,但我不知道如何使其适应上面的场景。
Get-ChildItem "[Folder Location]" | ForEach-Object {
$NewName = "{0:d6}$($_.Extension)" -f [int]$_.BaseName
Rename-Item $_.FullName $NewName
}
任何帮助都会非常感激。 感谢
答案 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
}