Search code examples
macosfileapplescriptosx-yosemitefinder

Applescript - New file SHORTEST WAY


so where this question was all about was just that I forgot to change new file to new folder. (Because I just copy, pasted the code a few times.) Regarding to the answer of vadian, here is the new code (edited):

property rustItems : {"Render.plist", "KleurInstellingen.txt", "Vrienden.txt", "Vijanden.txt", "Rust-Python-Embed.py", ¬
    "Std__PATH.plist", "CargoRun.sett", "Rust-Package.fix", "Rust-Package-Auto.app", ¬
    "Rust-PKG.pkg", "Project-Layout.jar", "Run-EXP.gib", "Radar.jar"}

property displayItems : {"Commons-io-2.4.jar", "commons-io-2.4.jar.sha", "Lastlog.log.gz", "Lastlog2.log.gz", ¬
    "windows.pkg", "ModuleSettings.pkg", "ModuleStates.pkg", "ColorBinds.pkg", "ModsReturn.pkg", "Textures_1.png", "Textures_2.png", "Textures_3.png"}

property jortpepeItems : {"Rust.class", "Rust$1.class"}
property utilityItems : {"Layout.class", "XYZ__Layout.class"}
property managerItems : {"Restrictions.class", "MAX__DELAY.class"}
property listenerItems : {"OtherEvents.class", "PlayerEvents.class", "PlayerEvents$1.class", ¬
    "PlayerChat.class", "PlayerChat$1.class"}

set chosenfolder to choose folder with prompt "Choose the Game folder to install the mods."

tell application "Finder"
    if exists folder "Rust$1" of chosenfolder then delete folder "Rust$1" of chosenfolder
    set modsFolder to make new folder at chosenfolder with properties {name:"Rust$1"}
    repeat with anItem in rustItems
        make new file at modsFolder with properties {name:anItem}
    end repeat
    set displayFolder to make new folder at modsFolder with properties {name:"Display"}
    repeat with anItem in displayItems
        make new file at displayFolder with properties {name:anItem}
    end repeat
    set jortpepeFolder to make new folder at modsFolder with properties {name:"jortpepe"}
    repeat with anItem in jortpepeItems
        make new file at jortpepeFolder with properties {name:anItem}
    end repeat
    set utilityFolder to make new folder at jortpepeFolder with properties {name:"Utilities"}
    set managerFolder to make new folder at jortpepeFolder with properties {name:"Managers"}
    set listenerFolder to make new folder at jortpepeFolder with properties {name:"Listeners"}
    repeat with anItem in utilityItems
        make new file at utilityFolder with properties {name:anItem}
    end repeat
    repeat with anItem in managerItems
        make new file at managerFolder with properties {name:anItem}
    end repeat
    repeat with anItem in listenerItems
        make new file at listenerFolder with properties {name:anItem}
    end repeat
end tell
end

Thanks for reading.

Jort

PS: If you know another file extension I can add like .class .txt .pkg etc. then please give a comment to this question with that other file extension. (Because I still want a bigger fake library to be generated and with real existing file names it looks better :P)


Solution

  • Not really an answer, but an improvement.

    This is a shorter version of your script using lists and repeat loops. Instead of an error branch repeating the whole code to create the structure it checks if the folder mods exists and delete it if necessary before creating the items.

    property modsItems : {"Render.plist", "KleurInstellingen.txt", "Vrienden.txt", "Vijanden.txt", "Rust-Python-Embed.pyth", ¬
        "Std__PATH.plist", "CargoRun.sett", "Rust-Package.fix", "Rust-Package-Auto.app", ¬
        "Rust-PKG.pkg", "Project-Layout.jar", "Run-EXP.gib", "Downloaded.txt", "Enttree.jar", "Radar.jar"}
    
    property displayItems : {"Commons-io-2.4.jar", "commons-io-2.4.jar.sha", "Lastlog.log.gz", "Lastlog2.log.gz", ¬
        "windows.pkg", "ModuleSettings.pkg", "ModuleStates.pkg", "ColorBinds.pkg", "ModsReturn.pkg", "Textures_1.png", "Textures_2.png", "Textures_3.png"}
    
    property jortpepeItems : {"Rust.class", "Rust$1.class"}
    property utilityItems : {"Layout.class", "XYZ__Layout.class"}
    property managerItems : {"Restrictions.class", "MAX__DELAY.class"}
    property listenerItems : {"OtherEvents.class", "PlayerEvents.class", "PlayerEvents$1.class", ¬
        "PlayerChat.class", "PlayerChat$1.class"}
    
    set chosenfolder to choose folder with prompt "Choose the Game folder to install the mods."
    
    tell application "Finder"
        if exists folder "mods" of chosenfolder then delete folder "mods" of chosenfolder
        set modsFolder to make new folder at chosenfolder with properties {name:"mods"}
        repeat with anItem in modsItems
            make new file at modsFolder with properties {name:anItem}
        end repeat
        set displayFolder to make new folder at modsFolder with properties {name:"Display"}
        repeat with anItem in displayItems
            make new file at displayFolder with properties {name:anItem}
        end repeat
        set jortpepeFolder to make new folder at modsFolder with properties {name:"jortpepe"}
        repeat with anItem in jortpepeItems
            make new file at jortpepeFolder with properties {name:anItem}
        end repeat
        set utilityFolder to make new folder at jortpepeFolder with properties {name:"Utilities"}
        set managerFolder to make new folder at jortpepeFolder with properties {name:"Managers"}
        set listenerFolder to make new folder at jortpepeFolder with properties {name:"Listeners"}
        repeat with anItem in utilityItems
            make new file at utilityFolder with properties {name:anItem}
        end repeat
        repeat with anItem in managerItems
            make new file at managerFolder with properties {name:anItem}
        end repeat
        repeat with anItem in listenerItems
            make new file at listenerFolder with properties {name:anItem}
        end repeat
    end tell