Powershell重命名特定角色

Powershell renaming a specific Character

我一直在使用简单的脚本在 powershell 中批量重命名 .las 文件:

cd "C:\Users\User\desktop\Folder"
Dir | Rename-Item -NewName {$_.name-replace "-", "" }
Dir | Rename-Item -NewName {$_.name-replace "_", "" }
Dir | Rename-Item -NewName {$_.BaseName+ "0.las"}

效果很好,但我需要修改它以适应不同的命名约定。

文件以这种格式开始:123_45-67-890-12W_0 并转换为 123456789012W00.las

有时候W后面的数字不是零,我需要把它作为最后一位,例如。 123_45-67-890-12W_2需要转123456789012W02

我不确定如何使用 if 语句和 select powershell 格式的特定数字,这就是我解决这个问题的方式。有没有人知道如何解决这个问题?

谢谢

您可以使用正则表达式来实现:

Get-ChildItem "C:\Users\User\desktop\Folder" | ForEach-Object {

    #capture everything we need with regex
    $newName = $_.Name -replace "(\d{3})_(\d{2})-(\d{2})-(\d{3})-(\d{2})(\w)_(\d)",''

    #insert 0 before last digit and append file extension
    $newName = $newName.Insert(($newName.Length - 1), "0") + ".las"

    #rename file
    Rename-Item $_.FullName -NewName $newName
}

您可以使用 substring 方法获取基本名称中除最后一个字符以外的所有字符,然后连接零,然后再次使用 substring 获取基本名称的最后一个字符,最后以 .las 扩展名结束:

Dir | Rename-Item -NewName {($_.BaseName).substring(0,$_.BaseName.length - 1) + "0" + ($_.BaseName).substring($_.BaseName.length -1,1) + ".las"}
#                           ^^^^This gets everything but the last charcter^^^         ^^^^^^^^^^This gets the last character^^^^^^^^^^