file - Groovy 重命名文件

标签 file groovy io file-rename

我正在尝试使用 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
}

当我运行它时,文件的名称没有按预期更改。我想知道我怎么能让这个工作。

最佳答案

这里有很多错误:

  • 您的 dir变量不是目录;它是您实际要更改的目录中的文件。改变这一行:
    dir.eachFile (FileType.FILES) { file ->
    

    对此:
    dir.parentFile.eachFile (FileType.FILES) { file ->
    
  • renameTo方法不会重命名本地名称(我知道,非常违反直觉),而是重命名路径。所以更改以下内容:
        String newName = file.name
    

    对此:
        String newName = file.path
    
  • 现在,出于某种超出我理解的原因,println file.name仍然打印出旧名称。 然而 ,如果您查看实际目录后记,您将看到该文件已在目录中正确重命名。
  • 关于file - Groovy 重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39786470/

    相关文章:

    jenkins - 模拟 Jenkins 管道步骤

    arrays - 为什么数组的元素在乘以 1/2 或 1/3 时被格式化为零?

    c# - 检查两个文件名是否引用同一个文件

    C++读取二进制文件

    python - 如何从一个文件中获取在另一个文件中包含字符串的所有行?

    swift - 在 macOS 中访问打开文档的封闭文件夹的权限

    groovy - 如何根据groovy目录中的大小对所有文件进行排序?

    java - Eclipse 上的 Groovy 错误

    rust - 如何将命令 stdout 保存到文件?

    java - 程序在Eclipse中运行,导出的可运行jar文件打不开?