Obtém o caminho do pai da subpasta: Applescript

1

Eu quero obter o caminho da pasta pai de uma subpasta quando eu solto uma pasta em um aplicativo codificado em Applescript

Então, se eu derrubar uma pasta chamada 'Test1' que está na área de trabalho

Eu quero que o script me forneça '/ Users / username / Desktop /' como o caminho pai de 'Test1'. Este é o meu código:

on open the_dropped_folder

tell application "Finder"

 set FolderPath to the_dropped_folder
 set ParentPath to container of FolderPath
 set thepath to POSIX path of ParentPath

end tell
end open

Isso gera um erro dizendo que:

" Cant get class ctnr of {alias "Mac HD: Users:username:Desktop:Test1:"}

Alguma ideia de como posso conseguir isso?

    
por smokinguns 20.05.2011 / 02:21

2 respostas

2

O parâmetro open handler obtém uma lista de alias objetos 1 As chaves ( {} ) em sua mensagem de erro indicam que o erro ocorreu enquanto ele estava tentando operar em um objeto de lista.

Assim, você precisa usar algo como set FolderPath to first item of the_dropped_folder para trabalhar com um único item em vez da lista (e provavelmente dar ao parâmetro um nome no plural enquanto estiver nele para que ele “leia melhor”). Isso deve permitir que sua instrução set ParentPath to container of FolderPath funcione corretamente.

A próxima declaração provavelmente falhará. ParentPath será um objeto Localizador folder que não tenha uma propriedade POSIX path . Normalmente, a maneira mais fácil de contornar esse problema é fazer com que o Finder converta seu objeto item ( folder é uma subclasse de item ) em um objeto alias e extraia seu POSIX path ( Os objetos alias têm uma propriedade POSIX path ).

Se você colocar tudo isso junto, você pode acabar com algo parecido com isto:

on open someDroppedAliases
    set theAlias to first item of someDroppedAliases
    tell application "Finder"
        set parentFolder to container of theAlias
        set parentFolderAlias to parentFolder as alias
    end tell
    set parentFolderPath to POSIX path of parentFolderAlias
    display dialog "Path of container:" default answer parentFolderPath
end open

Sem todas as variáveis intermediárias:

on open someDroppedAliases
    tell application "Finder" to ¬
        set parentFolderPath to POSIX path of ¬
            (container of first item of someDroppedAliases as alias)
    display dialog "Path of container:" default answer parentFolderPath
end open

Ou, com Eventos do sistema (cujos objetos item têm, na verdade, uma propriedade POSIX path ):

on open someDroppedAliases
    tell application "System Events" to ¬
        set parentFolderPath to POSIX path of ¬
            container of first item of someDroppedAliases
    display dialog "Path of container:" default answer parentFolderPath
end open

Nota: Nada nas minhas versões (ou na sua formulação original) é específico para o processamento de pastas. O mesmo programa processará um arquivo descartado e gerará seu contêiner.

1 Tecnicamente, são «class bmrk» objetos no Snow Leopard, que parecem funcionar principalmente como objetos alias (embora possa haver algumas diferenças dos objetos true alias .

    
por 20.05.2011 / 06:13
1

Aqui está outro exemplo útil (acabei de resumir o texto acima para ilustrar o que parece ser uma armadilha comum para jovens jogadores como eu; não percebi que os parênteses são importantes).

Digamos que tmpItem seja um arquivo descartado em um droplet. Você pode dizer ao aplicativo "Finder" para ...

defina o destino para o caminho POSIX do tmpItem - Isso funcionará

defina o destino para o caminho POSIX do container de tmpItem - Isso VAI FALHAR

defina o destino para o caminho POSIX do contêiner de tmpItem como alias - Isso VAI FALHAR

defina o destino para o caminho POSIX (o contêiner de tmpItem como alias) - Isso terá SUCCEED

    
por 16.07.2014 / 07:33