Automatorサービスで(複数の)ファイルのパスをFinderで選択して取得し、シェルコマンドで使用したい。
私はすでにこのようなものを持っています:
AppleScriptを起動します:
on run {input, parameters}
tell application "Terminal"
activate
do script with command "clamscan --bell -i " & POSIX path of input
end tell
実行終了
これは機能しますが、1つのファイルまたはフォルダーに対してのみ機能し、/path/file with spaces
を/path/file\ with\ spaces
に変換しません。
それで、それを修正する方法は?
Automatorで、Run AppleScriptactonを使用してこれを行っているので、これは必要なことを行います。
on run {input, parameters}
set theItemsToScanList to {}
repeat with i from 1 to count input
set end of theItemsToScanList to quoted form of (POSIX path of (item i of input as string)) & space
end repeat
tell application "Terminal"
activate
do script with command "clamscan --bell -i " & theItemsToScanList
end tell
end run
物事を複雑にし、他の答えに示されているリグマロールを通過する必要はありません!
または、プレーンでそれを行うことを選択した場合AppleScriptscript/application、これはあなたが必要とすることを行います:
set theseItems to application "Finder"'s selection
set theItemsToScanList to {}
repeat with i from 1 to count theseItems
set end of theItemsToScanList to quoted form of (POSIX path of (item i of theseItems as string)) & space
end repeat
tell application "Terminal"
activate
do script with command "clamscan --bell -i " & theItemsToScanList
end tell
注:上記のexampleAppleScriptcodeはまさにそれであり、適切/必要/必要に応じてエラー処理は含まれません。ユーザーは、エラー処理を追加する責任があります。提示されたサンプルコードまたは自分で作成したコードの場合。
これは、最新バージョンのSierraを使用して私のために機能します
property posixPathofSelectedFinderItems : {}
property QposixPathofSelectedFinderItems : {}
-- stores the selected files in the active Finder window
-- in the variable "these_items"
tell application "Finder"
set these_items to the selection
end tell
-- returns the Posix Path of each of those files and
-- stores all of that info in the "posixPathofSelectedFinderItems"
-- as a list
repeat with i from 1 to the count of these_items
set this_item to (item i of these_items) as alias
set this_info to POSIX path of this_item
set end of posixPathofSelectedFinderItems to this_info
end repeat
repeat with i from 1 to number of items in posixPathofSelectedFinderItems
set this_item to item i of posixPathofSelectedFinderItems
set this_item to quoted form of this_item
set end of QposixPathofSelectedFinderItems to (this_item & " ")
end repeat
tell application "Terminal"
activate
do script with command "clamscan --bell -i " & items of QposixPathofSelectedFinderItems
end tell
set posixPathofSelectedFinderItems to {}
set QposixPathofSelectedFinderItems to {}