У меня есть папка, и внутри этой папки есть куча подпапок. Используя AppleScript, я хочу сохранить имена этих подпапок в массиве.

Вот моя проблема: каждый путь содержит   "(пробелы), я хочу заменить путями, содержащими дружественную для UNIX нотацию" "(обратный слеш с пробелом; как в /my/fancy\ path/).

Как видите, я здесь только на полпути к своей цели. Я потратил на сумму хорошей ночи трудоемких попыток, дурачиться с replace_chars подпрограммами, do shell script -with- sed комбо и кто знает что. Нет кости.

tell application "Finder"

    set myRepos to name of folders of folder ("/Users/hced/Dropbox/GitHub/" as POSIX file)
    --> {"320andup", "Baseline.js (jQuery & vanilla JS version)", "Bootstrap (HTML, CSS, and JS toolkit from Twitter)", "Chirp.js (Tweets on your website, simply)", "Coordino"}

end tell

Изменить: допустимым примером пути будет /Users/hced/Dropbox/GitHub/A\ folder\ named\ with\ spaces

3 ответа3

2

Читая ваш вопрос, я не уверен, что вы можете использовать пути в кавычках вместо пробелов ...

tell application "Finder"
        set folderGitHub to folder ("/Users/hced/Dropbox/GitHub/" as POSIX file)

        set listFolders to (every folder in folderGitHub as alias list)
end tell

set listPosixPathsQuoted to {}

repeat with aliasFolder in listFolders
        set listPosixPathsQuoted to listPosixPathsQuoted & {quoted form of POSIX path of aliasFolder}
end repeat
1

Это должно сделать это:

tell application "Finder"
    set myRepos to name of folders of folder ("/Users/hced/Dropbox/GitHub/" as POSIX file)
end tell

repeat with theIndex from 1 to number of items in myRepos
    set item theIndex in myRepos to replace_chars(item theIndex in myRepos, " ", "\\ ")
end repeat

return myRepos

on replace_chars(this_text, search_string, replacement_string)
    set AppleScript's text item delimiters to the search_string
    set the item_list to every text item of this_text
    set AppleScript's text item delimiters to the replacement_string
    set this_text to the item_list as string
    set AppleScript's text item delimiters to ""
    return this_text
end replace_chars

Это берет имена папок, которые вы уже получили, и перебирает каждый элемент в списке, заменяя каждый пробел символом \ . Обратите внимание, что обратную косую черту необходимо экранировать, и что редактор AppleScript отображает строки, включая двойную обратную косую черту. Однако вы можете проверить, что они правильно экранированы с помощью одной обратной косой черты, set the clipboard to item 2 of myRepos и вставив полученный текст в текстовый редактор - это всего лишь причуда редактора AppleScript.

Функция replace_chars - это довольно стандартный шаблон. Я скопировал его из Mac OS X Automation.

0

Обработчик Trash Man'а, размещенный на MacScripter, спасет всех проблемных персонажей ...

set myFolder to quoted form of "/Users/hced/Dropbox/GitHub/"

    set theFolders to every paragraph of (do shell script "find " & myFolder & " -type d -depth 1 ")
    set escFolders to {}

    repeat with aFolder in theFolders
        set end of escFolders to escape_string(aFolder as text)
    end repeat

    on escape_string(input_string)
    set output_string to ""
    set escapable_characters to " !#^$%&*?()={}[]'`~|;<>\"\\"
    repeat with chr in input_string
        if (escapable_characters contains chr) then
            set output_string to output_string & "\\" -- This actually adds ONE \ to the string.
        else if (chr is equal to "/") then
            set output_string to output_string & ":" -- Swap file system delimiters
        end if
        set output_string to output_string & chr
    end repeat
    return output_string as text
end escape_string

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .