2013-05-30 95 views
1

我有一个PowerShell脚本,将一个目录中的所有文件,重命名第一个和移动它,然后去下一个文件。有时候会有多个文件被重命名为相同的名称(因为系统会发生变化,不理想并且将不得不更改),并覆盖了不应该被-force覆盖的文件。我需要所有文件移动,但也有唯一的名称,所以我们在目标位置提供它们。有一个简单的办法,使它自动重命名所以它看起来像:PowerShell移动 - 项目重命名如果文件存在

123.txt 123(1)名为.txt 123(2).txt文件

123.txt 123_1.txt 123_2.txt

+1

我对'powershell'知之甚少(这个名字本身就是一个笑话......),但不会提供一些功能创建的文件名被保证是像其他独特环境? – arkascha

+0

我发现了一些文档,但没有看到有关唯一名称的任何信息,只是它可以强制移动并覆盖已存在的文件,或者抛出错误并跳过移动,将旧文件和新文件留在各自的目录中。 – bmbaeb

回答

4

有没有内置的方式来做到这一点。试试这个:

$src = "d:\temp" 
$dest = "d:\temp1" 
$num=1 

Get-ChildItem -Path $src -Filter *.txt -Recurse | ForEach-Object { 

    $nextName = Join-Path -Path $dest -ChildPath $_.name 

    while(Test-Path -Path $nextName) 
    { 
     $nextName = Join-Path $dest ($_.BaseName + "_$num" + $_.Extension)  
     $num+=1 
    } 

    $_ | Move-Item -Destination $nextName 
} 
相关问题