gestore di script apple non funziona in dichiarazione tell


0

Ciao, sto scrivendo uno script che rinominerà i file / le cartelle selezionati nel formato xxxyearxxx in xxxyear. Sono nuovo di Apple Script, ho fatto molte cose con Autoit / C ++.

Non riesco a far funzionare il mio gestore in una dichiarazione tell. Ho provato di tutto ("mio", "di me") e ho riscontrato errori con il gestore. Il gestore funziona bene quando viene chiamato al di fuori dell'istruzione tell:

con "mio", lo script non viene compilato e viene visualizzato il seguente errore: Errore di sintassi: un nome di comando non può andare dopo questo "mio".

con "me" Questo script viene compilato ed eseguito, ma viene visualizzato il seguente errore: "Il Finder ha ricevuto un errore: il parametro using è mancante per splittext". numero -1701 da «class by»

Qualsiasi aiuto per spostarsi sarebbe molto utile. Script di seguito:

`

set MaxYear to 2018
set MinYear to 1990
-- return splittext {"abc2015def", 2018, 1990}


tell application "Finder"
set allfiles to every item of (choose folder with prompt "Choose the Files you'd like to rename:" with multiple selections allowed) as list
-- set allfile to selections

repeat with x in allfiles
    if kind of x is "Folder" then
        -- if xtype is "Folder" then
        set cname to name of x
        set newname to splittext {cname, MaxYear, MinYear} of me
        if newname then
            set name of x to newname
        end if
    end if
end repeat
end tell


on splittext {theText, MaxYear, MinYear}
set dyear to MaxYear
repeat until dyear < MinYear
    set AppleScript's text item delimiters to dyear
    set theTextItems to every text item of theText
    set AppleScript's text item delimiters to ""
    if (count of theTextItems) > 1 then
        return the first item of theTextItems & dyear as string
    end if
    set dyear to dyear - 1
end repeat
return false
end splittext

qualcuno può aiutare?
Rimmi2002

Risposte:


0

questo codice funziona, ma ...

il tuo gestore:

splittext {theText, MaxYear, MinYear}

dovrebbe essere :

splitText(theText, MaxYear, MinYear}

Notare la parentesi anziché le parentesi graffe (e anche l'alloggiamento del cammello).

Dovresti sempre restituire una stringa nel tuo gestore:

return "" -- return false

E nel ciclo di ripetizione sopra:

if newname is not "" then -- if newname then

Ci sono altre insidie: il tipo di x. È una stringa locale, ovvero "Cartella" sarà "Dossier" in francese. Forse dovresti fare qualcosa del genere se non sei di un paese di lingua inglese:

log kind of x

Quindi l'intero codice che funziona sulla mia macchina (10.12.6):

set MaxYear to 2018
set MinYear to 1990
--return splitText("abc2015def", 2018, 1990)

tell application "Finder"
    set allfiles to every item of (choose folder with prompt "Choose the Files you'd like to rename:" with multiple selections allowed) as list
    -- set allfile to selections

    repeat with x in allfiles
        log kind of x
        if kind of x is "Folder" then
            -- if xtype is "Folder" then
            set cname to name of x
            set newname to my splitText(cname, MaxYear, MinYear)
            if newname is not "" then
                set name of x to newname
            end if
        end if
    end repeat
end tell


on splitText(theText, MaxYear, MinYear)
    set dyear to MaxYear
    repeat until dyear < MinYear
        set AppleScript's text item delimiters to dyear
        set theTextItems to every text item of theText
        set AppleScript's text item delimiters to ""
        if (count of theTextItems) > 1 then
            return the first item of theTextItems & dyear as string
        end if
        set dyear to dyear - 1
    end repeat
    return ""
end splitText

0

Grazie in questo caso alla fine ho scoperto che l'errore splittext è una sorta di elemento AppleScript interno. Non stavo aggiungendo le parentesi graffe il programma stava cambiando automaticamente le mie parentesi standard in parentesi graffe.

Una volta ho cambiato il nome in _splittext Tutto ha funzionato bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.