我尝试使用Groovy重命名目录中的文件,但我似乎无法理解它是如何工作的。
这是我的剧本:
import groovy.io.FileType
def dir = new File("C:/Users/דודו/Downloads/Busta_Rhymes-Genesis-(Retail)-2001-HHI")
def replace = {
if (it == '_') {
' '
}
}
String empty = ""
dir.eachFile (FileType.FILES) { file ->
String newName = file.name
newName = newName.replaceAll(~/Busta_Rhymes/, "$empty")
newName = newName.replaceAll(~/feat/, "ft")
newName = newName.replaceAll(~/-HHI/, "$empty")
newName = newName.replaceAll(~/--/, "-")
newName = newName.collectReplacements(replace)
file.renameTo newName
println file.name
}
当我运行此文件时,文件的名称未按预期更改。我想知道如何让它发挥作用。
答案 0 :(得分:3)
这里有很多错误:
您的dir
变量不是目录;它是您实际想要更改的目录中的文件。改变这一行:
dir.eachFile (FileType.FILES) { file ->
到此:
dir.parentFile.eachFile (FileType.FILES) { file ->
renameTo
方法不会重命名本地名称(我知道,非常违反直觉),它会重命名路径。所以改变以下内容:
String newName = file.name
到此:
String newName = file.path
现在,由于某些原因,我无法理解,println file.name
仍然打印出旧名称。 但是,如果你看一下后面的实际目录,你会看到文件在目录中被正确重命名。