Perché il mio applescript è in grado di verificare se un file non funziona?

1

Ho un'applicazione appleScript che inserisce un nome utente e avvia un download basato su quel nome utente. Nell'app utilizzo il codice qui sotto per verificare se un file esiste già e quindi rinominare il file se lo fa.

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

Tutto ad un tratto ieri ha smesso di funzionare correttamente. Ho aggiunto il seguente codice per assicurarmi che la cartella che stavo salvando esistesse.

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

Anche quando commento quel codice ora non funziona ancora. Cosa ho fatto di sbagliato?     fine tell

    
posta Eli Greenberg 04.04.2012 - 07:14
fonte

1 risposta

4

Sembra che il Finder abbia bisogno del percorso assoluto della cartella home anziché del percorso relativo. Invece di iniziare il percorso con ~/ , è necessario iniziare con /Users/username/ .

Invece di codificare il nome utente nello script, puoi fare in modo che AppleScript costruisca il percorso assoluto al volo:

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

Quindi puoi sostituire "~/ con homePath & "

Ad esempio:

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

diventerebbe

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

In alternativa, se utilizzi solo ~ con il percorso ~/Downloads/Conversion/ , puoi invece modificare l'intero percorso in una variabile:

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

Quindi lo script finale sarebbe:

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
    
risposta data 04.04.2012 - 08:45
fonte

Leggi altre domande sui tag