Applescript: создайте новую структуру папок, если она не существует - PullRequest
4 голосов
/ 24 февраля 2012

Я искал через доски объявлений, пытаясь выяснить, как выполнить этот скрипт.По сути, цель состоит в том, чтобы иметь возможность запускать этот сценарий внутри папки, и если определенные папки не существуют, эти папки затем будут созданы.Если они уже существуют, ничего не происходит.Вот то, что я пока собрал:

property archivesFolder : "Archives"

property imagesFolder : "Images"

property proofreadFolder : "Proofreading"

property proofFolder : "Proofs"

property sourceFolder : "Source"

try

tell application "Finder" to set theLocation to (folder of the front window as alias)

end try

tell application "Finder"

    if (exists folder archivesFolder) then
        (* do nothing *)
    else
        make new folder at theLocation with properties {name:archivesFolder}
    end if

    if (exists folder imagesFolder) then
        (* do nothing *)
    else
        make new folder at theLocation with properties {name:imagesFolder}
    end if

    if (exists folder proofreadFolder) then
        (* do nothing *)
    else
        make new folder at theLocation with properties {name:proofreadFolder}
    end if

    if (exists folder proofFolder) then
        (* do nothing *)
    else
        make new folder at theLocation with properties {name:proofFolder}
    end if

    if (exists folder sourceFolder) then
        (* do nothing *)
    else
        make new folder at theLocation with properties {name:sourceFolder}
    end if

end tell

Что я делаю не так?(простите мое форматирование кода n00b, на работе и не могу понять, как создавать блоки кода) Кроме того, возможно ли это не только в переднем окне, но и в папке, которая только что выбрана?Любая помощь будет потрясающей.

Ответы [ 4 ]

4 голосов
/ 25 февраля 2012

Вы также можете использовать сценарий оболочки с mkdir , так как опция создания промежуточных папок не выдаст ошибку, если папка уже существует.

#  define a list of folders - items will need to be quoted if they contain spaces, etc.
property theFolders : {"Archives", "Images", "ProofReading", "Proofs", "Source"} -- can also nest, e.g. "Inside/One"

try
    tell application "Finder" to set targetFolder to (target of the front window) as alias
on error -- no window
    set targetFolder to (choose folder)
end try

# build a parameter string from the folder list
set {tempTID, AppleScript's text item delimiters} to {AppleScript's text item delimiters, space}
set {theFolders, AppleScript's text item delimiters} to {theFolders as text, tempTID}

do shell script "cd " & quoted form of POSIX path of targetFolder & "; mkdir -p " & theFolders
3 голосов
/ 24 февраля 2012

Я предлагаю два варианта (для запуска скрипта):

Вариант 1 : взять этот код (при условии, что он выполняет то, что вы планируете) и сохранить его как приложение (с помощью редактора сценариев).

Затем просто перетащите это приложение на панель инструментов вашего окна (вам нужно, чтобы панель инструментов была видимой). Для этого при перетаскивании удерживайте клавишу команды.

Вариант 2 : Использовать Батлер: http://manytricks.com/butler/ (есть бесплатная версия, я не знаю вашу версию OSX).

Позволяет определять общесистемные сочетания клавиш для сценариев appleScript.

Создание умного предмета (applecript); вставьте туда код и в имени скрипта добавьте сочетания клавиш: пример: create folder here ⇧⌥⌘N

EDIT:

Согласно вашему комментарию, я понимаю вашу проблему и могу вам сказать, что вы пропустили путь (текущая папка, в вашем случае theLocation)

Итак, в каждом случае if (exists folder archivesFolder) then вам нужно добавить of theLocation следующим образом: if not (exists folder archivesFolder of theLocation) then

Наконец, зная, что вы ничего не сделаете, если папка существует, просто проверьте ложный случай.

Я проверил этот код и выкладываю его здесь:

property archivesFolder : "Archives"

property imagesFolder : "Images"

property proofreadFolder : "Proofreading"

property proofFolder : "Proofs"

property sourceFolder : "Source"

try

    tell application "Finder" to set theLocation to (folder of the front window as alias)

end try

tell application "Finder"

    if not (exists folder archivesFolder of theLocation) then
        make new folder at theLocation with properties {name:archivesFolder}
    end if

    if not (exists folder imagesFolder of theLocation) then
        make new folder at theLocation with properties {name:imagesFolder}
    end if

    if not (exists folder proofreadFolder of theLocation) then
        make new folder at theLocation with properties {name:proofreadFolder}
    end if

    if not (exists folder proofFolder of theLocation) then
        make new folder at theLocation with properties {name:proofFolder}
    end if

    if not (exists folder sourceFolder of theLocation) then
        make new folder at theLocation with properties {name:sourceFolder}
    end if

end tell
0 голосов
/ 20 января 2014

Это скрипт, который я сделал, чтобы отсортировать кучу медицинских файлов в подпапках в зависимости от даты обслуживания (объясняется «текст с 5 по 14» в скрипте; файлы названы в соответствии с шаблоном, чтобы скрипт мог извлечьдата обслуживания от имени файла).Вместо того, чтобы проверять, существует ли папка, я просто помещаю инструкцию make folder в блок try;если папка уже существует, попытка завершится неудачно, но сценарий будет продолжен при условии, что папка уже существует.Использование элемента «текст» вместо «символ» возвращает извлеченную строку как одну строку, а не как массив символов, которые необходимо преобразовать обратно в строку.

tell application "Finder"
set theDirectory to "Internal Disk:Users:steven:Documents:Vondalee:Medical"
set theFiles to every file in folder theDirectory whose name extension is "pdf"
repeat with eachFile in theFiles
    set theFileName to the name of eachFile
    set theFolder to text 5 thru 14 of theFileName
    try
        make new folder at theDirectory with properties {name:theFolder}
    end try
    move eachFile to folder theFolder of folder theDirectory
end repeat
end tell
0 голосов
/ 27 февраля 2012

Попробуйте это:

tell application "Finder"
set theLocation to (target of front window) as string
set folderNames to {"archivesFolder", "imagesFolder", "proofreadFolder", "proofFolder", "sourceFolder"}
repeat with theFolder in folderNames
    try
        make new folder at theLocation with properties {name:"" & theFolder & ""}
    end try
    end repeat
end tell
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...