我尝试通过删除-.extension
重命名多个文件夹中的批处理文件示例文件:
为此,我运行以下脚本:
Get-ChildItem -recurse -exclude .dxl | foreach {
Rename-Item -Path $_.FullName -NewName (($_.BaseName -replace '(.)-.*?$','$1') + $_.Extension) }
这将给我以下错误:
“重命名项:当该文件已经存在时,无法创建该文件。”
如果重命名后文件已经存在,如何添加(1),(2),(3)来消除此问题?
答案 0 :(得分:0)
这是我针对此问题想到的:
$FileTracker = @{}
$files = (Get-ChildItem -recurse -exclude "*.dxl" -file | sort fullname).fullname
$files | foreach {
$Base = (($_ | select-string -pattern "(.*)-.*?$").matches.groups[1].value).Trim()
if ($FileTracker[$Base]) {
Rename-Item -path $_ -newName ((split-Path $Base -Leaf),"($($FileTracker[$Base]))",($_ -replace ".*(\..*?)$",'$1') -join "")
$FileTracker[$Base]++
}
else {
$FileTracker.add($Base,1)
Rename-Item -path $_ -newName ((split-path $Base -Leaf),($_ -replace ".*(\..*?)$",'$1') -join "")
}
}
请记住,此解决方案旨在使文件在各自的目录中唯一。如果在两个不同的目录中看到test file 1 - 23.txt
,它将把它们都重命名为test file 1.txt
。如果您已经有testfile 1(1).txt
和testfile 1(2).txt
之类的已重命名的文件,则此工作将存在问题。所以我需要知道这是否是一个条件。