我有一些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'。 –