2016-09-30 33 views
3

我想重命名使用Groovy的目录中的文件,但我似乎无法理解它是如何工作的。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

什么问题?它如何突然改变这个名字?你可以添加一个示例文件名和结果(和预期的结果)的问题? –

+0

文件的名称完全没有改变。如果我不清楚,我很抱歉 –

回答

3

有许多事情错在这里:

  1. dir变量不是目录;它是您实际想要更改的目录内的文件。改变这一行:

    dir.eachFile (FileType.FILES) { file -> 
    

    这样:

    dir.parentFile.eachFile (FileType.FILES) { file -> 
    
  2. renameTo方法不重命名的本地名称(我知道,非常违反直觉),它重命名的路径。所以改变如下:

    String newName = file.name 
    

    这样:

    String newName = file.path 
    
  3. 现在,由于某种原因,我无法理解,println file.name仍然打印出旧名称。 但是,如果您查看实际目录后缀,则会看到文件在目录中正确地重命名。