Powershell重命名特定字符

时间:2016-06-24 17:41:24

标签: powershell batch-rename

我使用简单的脚本批量重命名了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需要转到123456789012 W02

我不确定如何使用if语句并选择PowerShell格式的特定数字,这就是我如何处理这个问题。有没有人对如何解决这个问题有一些想法?

由于

2 个答案:

答案 0 :(得分:1)

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

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)",'$1$2$3$4$5$6$7'

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

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

答案 1 :(得分:0)

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

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^^^^^^^^^^