Как я могу получить «форму в кавычках», используя переменную?

#macos #shell #automation #applescript

#macos #оболочка #автоматизация #applescript

Вопрос:

Я работал над созданием скрипта, который перебирает файлы и может получать метаданные «ключевых слов» из метаданных spotlight. Получая помощь от других пользователей stackoverflow, я смог получить метаданные, но я не могу перебирать файлы.

 tell application "Finder"
set sourceFolder to folder POSIX file "/Users/jdavidson/Desktop/Upload/Birds and Butterflies/HighRes/"
set theFiles to files of sourceFolder
set inputPath to "/Users/jdavidson/Desktop/Upload/Birds and Butterflies/"

end tell

repeat with afile in theFiles
set filename to name of afile
set fname to text 1 thru ((offset of "." in filename) - 1) of filename
set pathVAR1 to "/Users/jdavidson/Desktop/Upload/Birds and Butterflies/HighRes/"
set pathVAR2 to pathVAR1 amp; filename
--set pathVAR3 to """ amp; pathVAR2 amp; """
set pathVAR3 to quoted form of pathVAR2

display dialog pathVAR3

set myvar to do shell script "mdls -name kMDItemKeywords " amp; pathVAR3

--Substring's the data to between "(" and ")"--
--set var1 to var1   1
set var2 to ((offset of ")" in myvar) - 1)
--set var2 to var2 - 1
set myKeywords to ((characters var1 thru var2 of myvar) as string)
display dialog myKeywords

end repeat
  

Код, который работает и не выдает ошибку, выглядит следующим образом:

 set myvar to do shell script "mdls -name kMDItemKeywords " amp; quoted form of "/Users/jdavidson/Desktop/Upload/Birds and Butterflies/To Process/Floral/RF78-3.tif"
set var1 to ((offset of "(" in myvar)   1)
--set var1 to var1   1
set var2 to ((offset of ")" in myvar) - 1)
--set var2 to var2 - 1
set myKeywords to ((characters var1 thru var2 of myvar) as string)
display dialog myKeywords
  

Проблема заключается в возможности передачи переменной в оболочку в «форме в кавычках»

Ответ №1:

Проще получить файлы в папке как alias list и получить пути POSIX из псевдонимов.

path to desktop as text это (HFS) путь к рабочему столу текущего пользователя

 set sourceFolder to (path to desktop as text) amp; "Upload:Birds and Butterflies:HighRes:"
tell application "Finder"
    set theFiles to files of folder sourceFolder as alias list
end tell

repeat with aFile in theFiles
    set myvar to do shell script "mdls -name kMDItemKeywords " amp; quoted form of POSIX path of aFile
    --- ...
end repeat
  

Ответ №2:

Я все переписал и смог заставить его работать с приведенным ниже кодом:

     set pathVAR1 to "/Users/johndavidson/Desktop/Upload/Temp/HighRes/"

    set pathVAR2 to pathVAR1 amp; filename

    set myvar to do shell script "mdls -name kMDItemKeywords " amp; quoted form of pathVAR2

    set var1 to ((offset of "(" in myvar)   1)

    set var2 to ((length of myvar) - 1)

    set myKeywords to ((characters var1 thru var2 of myvar) as string)