2013-05-30 94 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 
} 
相關問題