Проверка Applescript на наличие файла

Хорошо, я думал, что это будет просто, но, видимо, я упускаю что-то очевидное. Мой код выглядит следующим образом:

set fileTarget to ((path to desktop folder) & "file$") as string

if file fileTarget exists then
    display dialog "it exists"
else
    display dialog "it does not exist"
end if

Легко, верно? К сожалению, когда я запускаю скрипт, он возвращает ошибку

Can’t get file "OS X:Users:user:Desktop:files$".

Неважно, существует файл или нет, я получаю ту же ошибку. Я пробовал дюжину разных вещей, но это все еще ставит меня в тупик.


person EightQuarterBit    schedule 12.08.2010    source источник


Ответы (3)


Я использую эту подпрограмму, чтобы увидеть, существует ли файл или нет:

on FileExists(theFile) -- (String) as Boolean
    tell application "System Events"
        if exists file theFile then
            return true
        else
            return false
        end if
    end tell
end FileExists

Добавьте соль по вкусу.

person Philip Regan    schedule 12.08.2010
comment
Обратите внимание, что в Finder также есть команда exists с такой же функциональностью. - person Franklin Yu; 26.02.2021

Это просто, за исключением того, что «существует» — это команда Finder или System Events. Это не прямая команда AppleScript. Таким образом, вы должны обернуть его в блок кода приложения. К вашему сведению: вот еще один способ, который не требует приложения. Это работает, потому что, когда вы указываете путь к «алиасу», он должен существовать, иначе вы получите ошибку. Итак, вы можете сделать следующее.

set fileTarget to (path to desktop folder as text) & "file$"

try
    fileTarget as alias
    display dialog "it exists"
on error
    display dialog "it does not exist"
end try

ПРИМЕЧАНИЕ: у вас есть ошибка в вашем коде. Вы используете оператор & для добавления строк, но делаете это неправильно, хотя по счастливой случайности получаете правильный ответ. При использовании оператора & каждый объект по обе стороны от оператора должен быть строкой. «Путь к папке на рабочем столе» не является строкой, поэтому мы сначала должны сделать ее строкой, а затем добавить к ней строку «file$». Так сделай так...

set fileTarget to (path to desktop folder as text) & "file$"
person regulus6633    schedule 12.08.2010
comment
Он получил ((path to desktop folder) & "file$") as string от меня. Так я делаю это целую вечность, и у меня никогда не было проблем. - person Philip Regan; 13.08.2010
comment
Да, я знаю, что это работает, потому что в начале я тоже так делал. Applescript в этом хорош... он помогает исправлять мелкие ошибки. Если вы посмотрите на результат добавления до того, как он будет приведен к строке, он будет выглядеть так: {псевдоним Macintosh HD:Users:hmcshane:Desktop:, file$}. Это список из двух пунктов, так что это определенно не то, что нам нужно. Надеюсь, знание теории немного лучше поможет в будущем с чем-то более сложным, что не работает. - person regulus6633; 13.08.2010
comment
Я никогда не думал об этом таким образом, но ваш намного чище. Спасибо за совет. - person Philip Regan; 13.08.2010

чтобы избежать исходной ошибки Не удается получить файл «OS X: Пользователи: пользователь: Рабочий стол: файлы $». просто добавьте в скрипт блок сообщения, сообщите приложению «Finder», установите для fileTarget значение ((путь к папке на рабочем столе) и «file $») в виде строки

если файл fileTarget существует, то отобразите диалоговое окно «он существует», иначе отобразите диалоговое окно «он не существует» end if end tell

person Tom    schedule 10.01.2017