o manipulador de script da Apple não está funcionando no comando tell

0

Oi Estou escrevendo um script que irá renomear arquivos / pastas selecionados no formato xxxyearxxx para ser xxxyear. Eu sou novo no script da Apple, tenho feito muitas coisas sobre autoit / c ++.

Não consigo que meu manipulador funcione em uma instrução tell. Eu tentei de tudo ("meu", "de mim") e obter erros com o manipulador. O manipulador funciona bem quando chamado fora da declaração tell:

com "my", O script não compila e recebo o seguinte erro: Erro de sintaxe: um nome de comando não pode ir atrás deste "meu".

com "de mim" Este script compila e executa, mas recebo o seguinte erro: "O Finder recebeu um erro: O parâmetro using está faltando para o splittext." número -1701 de «class by»

Qualquer ajuda para se locomover seria muito útil. Script abaixo:

'

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
    
por Rimmi2002 29.04.2018 / 08:08

2 respostas

0

Obrigado, neste caso, eu finalmente encontrei o erro splittext é algum tipo de item AppleScript Interno. Eu não estava adicionando as chaves, o programa foi automaticamente mudando meus colchetes para chaves.

Depois que mudei o nome para _splittext, tudo funcionou bem.

    
por 22.06.2018 / 19:46
0

este código funciona, mas ...

seu manipulador:

splittext {theText, MaxYear, MinYear}

deve ser:

splitText(theText, MaxYear, MinYear}

Observe os parênteses em vez de chaves (e o revestimento do camelo também).

Você sempre deve retornar uma string no seu manipulador:

return "" -- return false

E no loop de repetição acima:

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

Há outras armadilhas: o tipo de x. É uma string local, ou seja, "Folder" será "Dossier" em francês. Talvez você deva fazer algo assim se não for do país falado em inglês:

log kind of x

Então, todo o código que funciona na minha máquina (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
    
por 21.06.2018 / 15:41