2016-09-30 2 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여전히 인쇄를 이전 이름에서. 그러나 실제 디렉토리를 살펴보면 파일이 디렉토리에서 올바르게 이름이 변경된 것을 알 수 있습니다.