如何使用变量获得 'quoted form of'?

How can I get a 'quoted form of' using a variable?

我一直在努力创建一个脚本来遍历文件并能够从 Spotlight 元数据中获取 'Keywords' 元数据。在从其他人那里获得有关 Whosebug 的帮助时,我已经能够获取元数据,但无法遍历文件。

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 & filename
--set pathVAR3 to "\"" & pathVAR2 & "\""
set pathVAR3 to quoted form of pathVAR2

display dialog pathVAR3

set myvar to do shell script "mdls -name kMDItemKeywords " & 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 " & 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

问题是能够将变量传递给 'quoted form of' shell

获取文件夹中的文件作为 alias list 并从别名获取 POSIX 路径更容易。

path to desktop as text是当前用户桌面的(HFS)路径

set sourceFolder to (path to desktop as text) & "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 " & quoted form of POSIX path of aFile
    --- ...
end repeat

我重写了所有内容并能够使用以下代码使其工作:

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

    set pathVAR2 to pathVAR1 & filename

    set myvar to do shell script "mdls -name kMDItemKeywords " & 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)