2012-02-24 3 views
4

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

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, на работе и не могу понять, как создавать блоки кода). Кроме того, возможно ли это не только в переднем окне, но и в папке, которая только что выбрана? Любая предоставленная помощь будет потрясающей.

ответ

3

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

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

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

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

Он позволяет вам определять общие клавиши для скриптов applescript.

Создайте умный предмет (applescript); вставьте код там, и во имя сценария добавить сочетания клавиш: пример: 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

У меня на самом деле он был настроен как вариант 1 прямо сейчас, и он отлично работает, если в папке ничего нет. Но если я удалю одну из этих папок, она сломает код и ничего не сделает. Я хочу, чтобы он работал в ситуациях, когда присутствуют не все папки, но некоторые из них уже могут быть там (что происходит в зависимости от того, кто установил исходную папку вверх). – user1231499

+0

@ пользователь1231499 здесь вы идете! если это сработало для вас, пожалуйста, подтвердите ответ. – jackJoe

+0

И как волшебство, он работает. Я думал, что может быть какой-то путь, необходимый для каждого случая, но я думаю, что я просто попробовал что-то вроде добавления «на место» и остановился, когда это не сработало. Большое вам спасибо, это будет здорово! На самом деле, не было бы способа установить это, чтобы, если вы просто выбрали выбранную папку, или это действительно возможно только в том случае, если папка находится в открытом окне? – user1231499

4

Вы также можете использовать скрипт с 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 
0

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

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 
0

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

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 
Смежные вопросы