在我的脚本中添加文件名增量

时间:2017-09-20 19:33:03

标签: powershell

我创建了一个脚本,将pst文件重命名为acl owner。有用。我唯一的问题是当同一个文件夹中有两个pst文件。它给它们相同的名称。如何在脚本中添加增量。它与Si = 1和Si ++相关,但没有结果。

这是我的剧本:

Get-ChildItem C:\Users\tester\* -Filter *.pst -recurse |
    ForEach-Object{
        $owner = ( $_ | Get-Acl ).Owner.Split("\")[1]
        $newname = "$owner.pst"
        $_ | Rename-Item -NewName $newname -Verbose -WhatIf
    }

2 个答案:

答案 0 :(得分:1)

通过添加已用于数组的名称并在每次循环时进行检查,这是一种快速而快速的解决方法。

$increment = 1
$alreadyProcessed = @()    
Get-ChildItem C:\Users\tester\* -Filter *.pst -recurse |
        ForEach-Object{
            $owner = ( $_ | Get-Acl ).Owner.Split("\")[1]
            $newname = "$owner.pst"
            if($alreadyProcessed.Contains($newName))
            {
                $newName = "$owner`$increment.pst"
                $increment++
            }
            $alreadyProcessed += $newname

            $_ | Rename-Item -NewName $newname -Verbose -WhatIf
        }

每次都会确保一个唯一的名称。

答案 1 :(得分:0)

如果您计划在同一个地方多次运行脚本,那么您应该检查可用的名称,否则您的计数器将重置为1,但这些文件已经存在。

function Get-NextName ($file) {

    $existing = (Get-Item "$file.*").Name
    $i = 1

    while ($existing -contains "$file.$i") {
        $i++
    }

    "$file.$i"
}

然后调整你的功能:

Get-ChildItem C:\Users\tester\* -Filter *.pst -recurse |
    ForEach-Object{
        $owner = ( $_ | Get-Acl ).Owner.Split("\")[1]
        $newname = Get-NextName "$owner.pst"
        $_ | Rename-Item -NewName $newname -Verbose -WhatIf
    }