ฉันจะติดตั้งสคริปต์นี้เป็นการดำเนินการกับโฟลเดอร์ได้อย่างไร


3

ฉันกำลังพยายามตั้งค่าสคริปต์เป็นการกระทำของโฟลเดอร์ที่จะระบุและเปลี่ยนอักขระที่ไม่ต้องการในชื่อของไฟล์ที่เพิ่มลงในโฟลเดอร์เป้าหมาย

ความตั้งใจที่จะให้การดำเนินการอัตโนมัตินี้เป็นการดำเนินการของโฟลเดอร์ที่ควรอ่านชื่อของไฟล์ที่เข้ามาหรือโฟลเดอร์ใหม่ตรวจสอบช่องว่างและขีดคั่นและแทนที่ด้วยเครื่องหมายขีดล่าง

นี่คือสิ่งที่ฉันมี:

on adding folder items to theFolder after receiving theNewItems
    repeat with i from 1 to count of theNewItems
        set thisItem to item i of theNewItems
        tell application "Finder"
            set FileName to name of thisItem
        end tell
    end repeat
    set AppleScript's text item delimiters to {space, "-"}
    set FileName to the FileName's text items
    set AppleScript's text item delimiters to "_"
    set FileName to the FileName as text
end adding folder items to

ฉันจะติดตั้งสคริปต์นี้เป็นการดำเนินการกับโฟลเดอร์ได้อย่างไร


ดังที่ CJK พูดในที่อื่นของคุณปิดตอนนี้คำถาม "อุปสรรคสำคัญอย่างหนึ่งที่คุณต้องเผชิญคือเปลี่ยนชื่อไฟล์หรือโฟลเดอร์ภายในโฟลเดอร์ที่กำลังดูซึ่งจะทำให้สคริปต์ของคุณเป็นครั้งที่สองเนื่องจากการเปลี่ยนชื่อเป็นหลัก การสร้างไฟล์ / โฟลเดอร์ใหม่ " รายการที่วางในโฟลเดอร์ที่จับตาดูมักจะถูกดำเนินการและย้ายออกจากโฟลเดอร์ที่จับตาดูไปยังโฟลเดอร์อื่น ขึ้นอยู่กับสิ่งที่เกิดขึ้นในโฟลเดอร์รายการจะถูกย้ายไปสามารถอยู่ภายในหรือภายนอกโฟลเดอร์เฝ้าดู คุณตั้งใจจะจัดการอย่างไรหากชื่อรายการมีอยู่แล้วในกระบวนการเปลี่ยนชื่อ
user3439894

@ user3439894 นอกจากจะไม่มีประสิทธิภาพแล้วปัญหาของการรันครั้งที่สองคืออะไร
JBis

คำตอบ:


1

คำตอบนี้อยู่ในตัวเองเป็นทางออกสำหรับคำถามข้างต้น อย่างไรก็ตามมันยังทำหน้าที่เป็นความต่อเนื่องของคำถามก่อนหน้านี้ที่ถูกปิดดังนั้นจึงรวมคำขอที่กว้างกว่าที่ต้องการเช่นกล่องโต้ตอบการยืนยันพร้อมตัวเลือกในการแก้ไขชื่อไฟล์และตัวเลือกเพื่อละเว้นการตรวจสอบและใช้ ชื่อไฟล์ของตัวเลือกของผู้ใช้

on adding folder items to the |folder| after receiving filelist
    local folder, filelist

    tell application "Finder" to repeat with f in the filelist
        try
            set item f's name to my validate(item f's name)
        on error E
            display notification E with title my name
        end try
    end repeat
end adding folder items to
--------------------------------------------------------------------------------
to validate(filename)
    local filename

    script validation
        property old : filename

        on newFilename for old
            local old, new

            set tids to 
                {"_", space, "-"}, ¬
                {"_&_", "&"}, ¬
                {"and", "&"}, ""}
            set new to old

            repeat with tid in tids
                set new to text items of new as text
                set my text item delimiters to contents of tid
            end repeat

            new
        end newFilename

        on nameShowingErrors()
            set tids to 
                {" ͎", space}, ¬
                {"-͎", "-", "—"}, ¬
                {"&͎", "&"}, ""}
            set info to old as text

            repeat with tid in tids
                set info to text items of info as text
                set my text item delimiters to contents of tid
            end repeat

            info
        end nameShowingErrors

        to confirmRename()
            local new

            set [q, lf] to [quote, linefeed]

            tell (display dialog ["The following characters were", ¬
                " found in the filename: ⟨space⟩, \"-\" ", ¬
                " ⟨hyphen⟩ \"&\" ⟨ampersand⟩", lf, lf, ¬
                " Filename: ", q, nameShowingErrors(), q, ¬
                lf, lf, "By default, these characters will", ¬
                " be replaced with underscores.", ¬
                " Alternatively, you can make your own edits", ¬
                " below and revalidate the filename again."] ¬
                as text ¬
                with title ("Validate Filename") ¬
                default answer (newFilename for old) ¬
                buttons ["Rename", "Keep This Name"] ¬
                default button 1 ¬
                with icon (path to resource ("Finder.icns") ¬
                in bundle application "Finder")) to if ¬
                "Rename" = its button returned ¬
                then return its text returned

            false
        end confirmRename
    end script

    tell validation
        if filename = (newFilename for filename) then return filename
        set newName to confirmRename()
        if newName = false then return its old
        if newName  (newFilename for newName) ¬
            then return validate(newName)
        newName
    end tell
end validate

ในขณะที่สคริปต์นี้ใช้งานได้ฉันควรเตือนคุณเกี่ยวกับความคิดเห็นที่ฉันทิ้งไว้กับคำถามดั้งเดิมของคุณซึ่งผู้ใช้รายอื่นได้กล่าวข้างต้นซ้ำ: สคริปต์นี้มีศักยภาพที่จะถูกเรียกสองครั้งสำหรับไฟล์เดียวเนื่องจากการเปลี่ยนชื่อไฟล์ การรับชมจะทำให้เกิดการกระทำของโฟลเดอร์อีกครั้ง สิ่งนี้จะเกิดขึ้นเมื่อผู้ใช้เลือกที่จะแก้ไขชื่อไฟล์ที่แนะนำและระบุชื่อที่ไม่ถูกต้อง สคริปต์จะขอให้มีการตรวจสอบชื่อไฟล์ใหม่ด้วยการแสดงกล่องโต้ตอบเป็นครั้งที่สอง (จนถึงตอนนี้เป็นเรื่องปกติและสิ่งที่ควรจะเกิดขึ้น) อย่างไรก็ตามเมื่อผู้ใช้เลือกที่จะไม่สนใจเกณฑ์การตั้งชื่อและใช้ชื่อนี้แล้วไฟล์จะถูกเปลี่ยนชื่อและสคริปต์จะถูกเรียกใช้อีกครั้ง สิ่งนี้จะปรากฏขึ้นในกล่องโต้ตอบสำหรับหนึ่งในสาม เวลาซึ่งไม่ใช่สิ่งที่เราต้องการจะเกิดขึ้นในอุดมคติ แต่ก็หลีกเลี่ยงไม่ได้

(นี่ไม่ใช่ปัญหาเมื่อไฟล์ถูกเปลี่ยนชื่อเป็นชื่อไฟล์ที่ผ่านการตรวจสอบความถูกต้องเนื่องจากสคริปต์ - แม้ว่าจะถูกดำเนินการสองครั้งโดยไม่คำนึงถึง - ไม่ได้ทำสิ่งใดสำหรับชื่อไฟล์ที่ไม่ต้องการเปลี่ยน

ด้วยเหตุผลข้างต้นฉันขอแนะนำให้คุณพิจารณาการนำโฟลเดอร์ของคุณไปใช้ต่างกันเล็กน้อยและให้ย้ายไฟล์ไปยังโฟลเดอร์เอาท์พุทใหม่ก่อนที่จะถูกเปลี่ยนชื่อ วิธีนี้ทำได้ง่ายมากโดยเพิ่มบรรทัดก่อนหน้านี้set item f's name to...ที่มีลักษณะดังนี้:

move item f to the outputFolder

โดยที่คุณจะได้กำหนดoutputFolderเป็นpropertyหรือตัวแปรในช่วงเริ่มต้นของสคริปต์ที่ชี้ไปยังตำแหน่งที่มีโฟลเดอร์เอาท์พุทอยู่ (ควรเป็นแบบalias) เช่น:

set outputFolder to POSIX file "/Users/%you%/My Watched Folder/Processed Files" as alias

แต่สำหรับตอนนี้ฉันได้เขียนสคริปต์เพื่อทำสิ่งที่คุณต้องการ ฉันสมมติว่าจะไม่มีหลายกรณีที่คุณจะไม่สนใจเกณฑ์การตั้งชื่อของคุณเองดังนั้นปรากฏการณ์ "สามกล่องโต้ตอบ" อาจไม่เกิดขึ้นหรือไม่น่ารำคาญเมื่อมันเกิดขึ้น


หากต้องการติดตั้งสคริปต์เป็นการดำเนินการกับโฟลเดอร์ฉันจะพาคุณไปยังส่วนแรกของคำตอบก่อนหน้าซึ่งฉันได้ถ่ายโอนไว้ด้านล่าง

การทำงานของโฟลเดอร์

การกระทำโฟลเดอร์ที่สามารถสร้างขึ้นในหนึ่งในสองวิธี: ผ่านทางอัตโนมัติหรือโดยวิธีการสคริปต์การกระทำโฟลเดอร์

อัตโนมัติบน MacOS

สำหรับข้อมูลเกี่ยวกับวิธีสร้างสคริปต์แอ็คชันโฟลเดอร์ซึ่งฉันอาจกล่าวได้ว่าเป็นวิธีที่เหมาะสมกว่าในกรณีนี้คุณอาจต้องการอ่านคู่มือการทำงานอัตโนมัติของ Mac Automation Scripting - การดูโฟลเดอร์ซึ่งมีรายละเอียดวิธีการทำเช่นนี้

ส่วนที่ชื่อการแนบสคริปต์การทำงานโฟลเดอร์ไปยังโฟลเดอร์เป็นสิ่งที่เกี่ยวข้องกับงานมากที่สุด


@branarama คุณมีส่วนร่วมในเรื่องนี้อย่างไร?
CJK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.