Come posso installare questo script come azione della cartella?

3

Sto provando a impostare uno script come azione della cartella che identificherà e modificherà i caratteri indesiderati nel nome di un file aggiunto a una cartella di destinazione.

L'intento è di far funzionare questa automazione come azione di una cartella che dovrebbe leggere il nome di un file in arrivo o di una nuova cartella, controllare spazi e trattini e sostituirli con caratteri di sottolineatura.

Ecco quello che ho finora:

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

Come posso installare questo script come azione di una cartella?

    
posta branarama 08.10.2018 - 22:37
fonte

1 risposta

1

Questa risposta è autonoma come soluzione alla domanda di cui sopra. Tuttavia, funge anche da continuazione per la domanda precedente che è stata chiusa , quindi incorpora alcune delle richieste più ampie che sono state richieste, come una finestra di dialogo di conferma con l'opzione per modificare il nome file e l'opzione per ignorare la convalida e usa un nome di file a scelta dell'utente.

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

Mentre questo script funziona, dovrei ricordarti il commento che ho lasciato alla tua domanda originale, che è stata ribadita sopra da un altro utente: questo script ha il potenziale per essere chiamato due volte per un singolo file, perché rinominare i file mentre sono all'interno della cartella guardata attiva nuovamente l'azione della cartella. Ciò accade quando l'utente decide di modificare il nome file suggerito e fornisce un nome non valido. Lo script chiederà che il nuovo nome file venga convalidato mostrando la finestra di dialogo una seconda volta (finora, questo è tutto normale, e interamente ciò che dovrebbe accadere). Tuttavia, quando l'utente sceglie di ignorare i criteri di denominazione e utilizzare comunque questo nome, il file viene rinominato e lo script viene nuovamente attivato. Questo fa apparire la finestra di dialogo per un terzo tempo, che non è quello che vorremmo accadesse idealmente, ma è inevitabile.

(Questo non è un problema quando i file vengono rinominati in un nome file convalidato, poiché lo script, sebbene eseguito due volte a prescindere, non fa nulla per i nomi di file che non richiedono modifiche).

Per il motivo sopra, ti consiglio di prendere in considerazione l'implementazione dell'azione della cartella in modo leggermente diverso e di spostare i file in una nuova cartella di output prima che vengano rinominati. Questo è molto facile da fare aggiungendo una riga prima di set item f's name to... che assomiglia a qualcosa del tipo:

move item f to the outputFolder

in cui avrai definito outputFolder come property o una variabile all'inizio dello script che punta al percorso in cui esiste la cartella di output (preferibilmente come alias ), ad esempio:

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

Ma, per ora, ho scritto la sceneggiatura per fare ciò che volevi. Suppongo che non ci saranno molti casi in cui vorrai ignorare i tuoi criteri di denominazione, quindi il fenomeno dei "tre dialoghi" potrebbe non presentarsi mai, o essere poco più che fastidioso quando lo fa.

Per installare uno script come azione della cartella , ti indirizzerò alla prima parte della mia risposta precedente, che ho trasferito in basso.

Azioni cartella

Un'azione di cartella può essere creata in due modi: tramite Automator o tramite uno script di azione della cartella .

Perinformazionisucomecreareunoscriptdiazionedellacartella,chedireiprobabilmenteèlasoluzionepiùadattainquestocaso,potrestileggereMac Automation Scripting Guide - Watching Folders , che spiega come farlo.

La sezione intitolata Collegamento di uno script azioni di una cartella a una cartella è la più pertinente all'attività.

    
risposta data 09.10.2018 - 11:01
fonte

Leggi altre domande sui tag