Applescript - создание папки, если она не существует

Может кто-нибудь указать, почему этот бит Applescript не работает? Спасибо!

on open droppedItems
    tell application "Finder"
        set inputFolder to (container of first item of droppedItems) as Unicode text
        if (exists folder ("converted") of inputFolder) then
            set outputFolder to (inputFolder & "/converted/") as text
        else
            make new folder at inputFolder with properties {name:"converted"}
            set outputFolder to the result as text
        end if
    end tell
end

person meeble    schedule 14.09.2013    source источник
comment
Есть ли какие-либо сообщения в журнале в редакторе сценариев?   -  person Barmar    schedule 14.09.2013
comment
Я не видел никаких сообщений в журнале.   -  person meeble    schedule 14.09.2013


Ответы (3)


Вот еще один подход: mkdir -p создаст новую папку, если она не существует. Со страницы руководства:

-p При необходимости создать промежуточные каталоги. Если этот параметр не указан, префикс полного пути каждого операнда уже должен существовать. С другой стороны, если указана эта опция, сообщение об ошибке не будет выдано, если каталог, указанный в качестве операнда, уже существует.

on open droppedItems
    repeat with anItem in droppedItems
        set outputFolder to POSIX path of ((anItem as text) & "::") & "converted"
        do shell script "mkdir -p " & quoted form of outputFolder
    end repeat
end open

РЕДАКТИРОВАТЬ

on open droppedItems
    repeat with anItem in droppedItems
        set outputFolder to POSIX path of ((anItem as text) & "::") & "converted"
        do shell script "mkdir -p " & quoted form of outputFolder

        --If you need to reference the folder by alias instead of posix path
        set outputFolderAlias to (POSIX file outputFolder) as alias
    end repeat
end open
person adayzdone    schedule 14.09.2013

У меня работает следующая версия. Я оставил в командах "говорить". Использование команд say — хороший метод отладки.

on open droppedItems
    say "on open"
    tell application "Finder"
        set inputFolder to (container of first item of droppedItems) as Unicode text
        set convertedFolderPath to inputFolder & "converted:"
        if (exists (folder convertedFolderPath)) then
            say "converted folder exists"
            set outputFolder to (inputFolder & "/converted/") as text
        else
            say "converted folder does not exist"
            make new folder at inputFolder with properties {name:"converted"}
            set outputFolder to the result as text
        end if
    end tell
    say "end open"
end open

---Редактировать---

О, это помечено тегом "Automator". Если ваш код находится в действии Automator «Запустить AppleScript», то он не должен иметь «при открытии dropItems». В Automator скрипт должен выглядеть следующим образом:

on run {input, parameters}
    -- Enter your scripting here (without the "on open droppedItems" part)
    return input
end run

---Редактировать 2---

ХОРОШО. Я понимаю, что путь был частью HFS и частью POSIX. Забавно то, что на моем компьютере он работал как для создания новой папки, так и для обнаружения того, что папка уже существует, но вот мой код, который исправлен так, чтобы иметь путь HFS без какой-либо части, являющейся POSIX-тьфу:

on open droppedItems
    say "on open"
    tell application "Finder"
        set inputFolder to (container of first item of droppedItems) as Unicode text
        set convertedFolderPath to inputFolder & "converted:" ---- changed this ----
        if (exists (folder convertedFolderPath)) then
            say "converted folder exists"
            set outputFolder to convertedFolderPath
        else
            say "converted folder does not exist"
            make new folder at inputFolder with properties {name:"converted"}
            set outputFolder to the result as text
            say "created folder"
        end if
    end tell
    say "end open"
end open

Пути для Mac

person Kaydell    schedule 14.09.2013
comment
Вы смешиваете пути hfs с путями posix. Папка outPut будет равна Mac OS X:Users:Keydell:Desktop:/converted/ в вашем скрипте. - person adayzdone; 14.09.2013
comment
Ваша версия работает, если преобразованная папка не существует, но если она уже существует, скрипт не работает. - person meeble; 14.09.2013
comment
Это не удается, потому что он смешивает пути posix с путями hfs. - person adayzdone; 14.09.2013

Не преобразовывайте inputFolder в текст Unicode. Finder не знает, что делать с текстом в последующих утверждениях.

set inputFolder to (container of first item of droppedItems)

Затем позже преобразуйте только inputFolder в текст.

set outputFolder to (inputFolder as text) & "converted"
person Jason    schedule 14.09.2013