เครื่องเล่นวิดีโอบนทีวีของฉันมีวิธีเปลี่ยน
จากไฟล์หนึ่งไปยังอีกไฟล์หนึ่งในการอ่านแบบต่อเนื่อง
และโหมดการเล่นของมันคือการเปลี่ยนจาก 1…​..mp4 ไปยัง 10…​.mp4
และไม่ใช่จาก `1…​mp4
ถึง `2…​.mp4
ปัญหาคือมีไฟล์และโฟลเดอร์เกือบ 900 รายการ
Bingo เป็นกรณีการใช้งานที่ยอดเยี่ยมของ Groovy สำหรับการจัดการ
ไฟล์, การเปลี่ยนชื่อ, การค้นหารูปแบบในชื่อไฟล์
หรือโฟลเดอร์
จุดประสงค์ในที่นี้คือเพื่อเปลี่ยนชื่อที่เริ่มต้นด้วย
ตัวเลข และตัวอักษรตัวที่สองของชื่อ
ไม่ใช่ตัวเลข ฉันจะเติม 0 ไว้ข้างหน้าชื่อนี้

renameFilesToStartWithTwoDigit.groovy

#!/usr/bin/env groovy
/**
 * get a crossplateform separator
 * @return
 */
static String getSeparator() {
    System.getProperty("file.separator")
}
/**
 * rename file
 * @param file
 * @param newName
 * @return the renamed file
 */
static File rename(File file, String newName) {
    assert file.renameTo(file
            .parentFile.path +
            getSeparator() +
            newName)
    new File(file
            .parentFile.path +
            getSeparator() +
            newName)
}

String rootFolderPath = System.getProperty("user.home") +
        "/Bureau/ng-courses/Udemy - Angular 7 " +
        "(formerly Angular 2) - The Complete Guide"

File rootFolder = new File(rootFolderPath)
assert rootFolder.exists()
assert rootFolder.directory
assert rootFolder.canRead()

List<File> dirList = new ArrayList<>()

//Adding rootFolder in dirList
// just in case there is some files in it
dirList.add(rootFolder)

//looping to get list of directories
//recursively inside rootFolder
rootFolder.traverse { File file ->
    !file.directory ?: dirList.add(file)
}

//looping through dirList
//to rename directories filling criterias
for (int i = dirList.size() - 1; i >= 0; i--) {
    Character[] chars = dirList.get(i).name.chars
    !(chars[0].digit && !chars[1].digit) ?:
            dirList.set(i, rename(dirList.get(i),
                    "0${dirList.get(i).name}"))
    if (dirList.get(i).directory) {
        //looping through directory
        //to rename file filling criterias
        dirList.get(i).listFiles().each { File f ->
            Character[] cs = f.name.chars
            !(cs[0].digit && !cs[1].digit) ?:
                    rename(f, "0${f.name}")
        }
    }
}

บทความที่เกี่ยวข้อง