我有一些PowerShell代碼,旨在遞歸地從文件名中取出特定字符。這非常有效,除非將字符取出導致2個文件與相同文件夾中的名稱匹配。Powershell遞歸重命名文件,而不是重命名重複
我在這裏找到了Powershell PowerShell script to remove characters from files and folders,但它並沒有解決我遇到的問題。
$characters = "$#"
$regex = "[$([regex]::Escape($characters))]"
$filesandfolders = Get-ChildItem -recurse "D:\projects\filenameCleaner\TEST" | Where-Object {$_.name -match $regex}
$filesandfolders | Where-Object {!$_.PsIscontainer} | foreach {
$New=$_.name -Replace $regex
Rename-Item -path $_.Fullname -newname $New -passthru
}
$filesandfolders | Where-Object {$_.PsIscontainer} | foreach {
$New=$_.name -Replace $regex
Rename-Item -path $_.Fullname -newname $New -passthru
}
我對Powershell還不是非常熟悉,並且會喜歡這個幫助。我只是想要腳本,如果它發現重複,它應該只在最後添加(1)或(2)等,具體取決於有多少。
請不要只給我一個答案,解釋它,這樣我可以瞭解正在發生什麼
假設我在名爲d $#ata.csv的文件夾中有三個文件,da $#ta.csv和dat $#a.csv - 您的代碼如何處理? –
@DaveSexton你是完全正確的。我已經修復了我相信我的更新,請看看其他問題嗎? – GrumpyCrouton
現在看起來不錯。只是一般性評論,我認爲你需要更多地瞭解Powershell的精神。在Powershell中,您擁有所有這些很酷的功能,如管道,範圍和字符串擴展。你不需要那麼複雜的字符串連接。例如你的輸出行可以這樣完成:''Rename''「$($ _。name)\'」爲''New \''「''或其他替代方式如下:''Rename'{0 }「改爲」{1}「'-f $ _。name,$ New'。 –