¿Por qué mi applecript para verificar si un archivo existe está fallando?

1

Tengo una aplicación de AppleScript que ingresa un nombre de usuario y comienza una descarga basada en ese nombre de usuario. En la aplicación, uso el siguiente código para verificar si ya existe un archivo y, a continuación, renombrarlo.

tell application "Finder"
if exists "~/Downloads/Conversion/" & cbUsername & ".flv" as POSIX file then
    set x to 1
    repeat
        set newCbFilename to cbUsername & "_" & x as string
        if exists "~/Downloads/Conversion/" & newCbFilename & ".flv" as POSIX file then
            set x to x + 1
        else
            exit repeat
        end if
    end repeat
    copy newCbFilename to finalCbFilename
    display dialog "Filename already exists " & "File will be named: " & finalCbFilename & ".flv" buttons "OK" default button "OK" with title "Error" with icon caution
else
    copy cbUsername to finalCbFilename
end if
end tell

De repente, ayer dejó de funcionar correctamente. Agregué el siguiente código para garantizar que la carpeta en la que estaba guardando existiera.

tell application "System Events"
if not (exists folder "~/Downloads/Conversion") then
    do shell script "mkdir ~/Downloads/Conversion"
end if

Incluso cuando comento ese código ahora todavía no funciona. ¿Qué hice mal?     decirle al final

    
pregunta Eli Greenberg 04.04.2012 - 07:14

1 respuesta

4

Parece que el Finder necesita la ruta absoluta a la carpeta de inicio en lugar de la ruta relativa. En lugar de iniciar la ruta con ~/ , debe comenzar con /Users/username/ .

En lugar de codificar el nombre de usuario en el script, puede hacer que AppleScript cree la ruta absoluta sobre la marcha:

set homePath to POSIX path of (path to home folder)

Luego puedes reemplazar "~/ con homePath & "

Por ejemplo:

if exists "~/Downloads/Conversion/" & cbUsername & ".flv" as POSIX file then

se convertiría en

if exists homePath & "Downloads/Conversion/" & cbUsername & ".flv" as POSIX file then

Alternativamente, si solo usa ~ con la ruta ~/Downloads/Conversion/ , podría cambiar esa ruta completa a una variable:

set cbPath to POSIX path of (path to home folder) & "Downloads/Conversion/"

Entonces el guión final sería:

set cbPath to POSIX path of (path to home folder) & "Downloads/Conversion/"

tell application "Finder"
    if exists cbPath & cbUsername & ".flv" as POSIX file then
        set x to 1
        repeat
            set newCbFilename to cbUsername & "_" & x as string
            if exists cbPath & newCbFilename & ".flv" as POSIX file then
                set x to x + 1
            else
                exit repeat
            end if
        end repeat
        copy newCbFilename to finalCbFilename
        display dialog "Filename already exists " & "File will be named: " & finalCbFilename & ".flv" buttons "OK" default button "OK" with title "Error" with icon caution
    else
        copy cbUsername to finalCbFilename
    end if
end tell
    
respondido por el joelseph 04.04.2012 - 08:45

Lea otras preguntas en las etiquetas