글쎄, 나는 내가 원하는 것을 성취하는 무언가 (읽기 : 더러운 핵)를 생각해 냈습니다. Sikuli를 통해 AppleScript 및 UI 스크립팅을 사용 했습니다 . 더 나은 오류 확인 및 내결함성과 같이 크게 향상 될 수 있으며 개선되어야합니다. 수십 개의 파일이 무언가를 질식시킬 수 있기 때문에 기본적으로 전체 프로세스를 거치면서 베이비 시팅해야했습니다. 즉, 그것은 나의 목적을 달성하고 나의 목표를 달성했습니다.
global theCount
set theCount to 0 as number
tell application "Finder"
set theFolder to choose folder with prompt "Select a directory:"
display dialog "This script will open each QuickTime movie file contained within this folder and its subfolders in QuickTime Player 7, and change the Author attribute to an Artist attribute using the Sikuli IDE. Proceed?"
my processFiles(theFolder)
display dialog (theCount as string) & " files processed."
end tell
on processFiles(theFolder)
tell application "System Events"
set theItems to get the name of every disk item of theFolder
end tell
set theFolder to theFolder as string --do this to concatenate with item name in loop
repeat with i from 1 to length of theItems --this is the loop that works on each file in the current folder
set theItem to item i of theItems
set theItem to (theFolder & theItem) as alias --get a file object
set itemInfo to info for theItem --get the file's info
if visible of itemInfo is true then --only work on invisibles
if folder of itemInfo is false then --and check for folders first or next line will fail
if type identifier of itemInfo is "com.apple.quicktime-movie" then
try --makes this more fault-tolerant
tell application "QuickTime Player 7"
open theItem
end tell
set theCount to theCount + 1
do shell script "java -jar /Applications/Sikuli-IDE.app/Contents/Resources/Java/sikuli-script.jar /Users/username/Desktop/flip\\ to\\ artist\\ source.sikuli" --Sikuli has a better command line interface, but it wasn't working on the current build. This is connecting directly to its java executable, and is REALLY slow as a result.
end try
end if
else if folder of itemInfo is true then
do shell script "touch \"" & POSIX path of theItem & "\"" --do this to track the progress of the script based on folder modification date
my processFiles(theItem) --operate recursively until all files are processed
end if
end if
end repeat
end processFiles
Sikuli 스크립트는 기본적으로 다음과 같습니다.
switchApp("QuickTime Player 7")
keyDown(Key.CMD)
type("j")
keyUp(Key.CMD)
click([Author annotation tag])
click([Artist option])
keyDown(Key.CMD)
type("s")
keyUp(Key.CMD)
keyDown(Key.CMD)
type("w")
keyUp(Key.CMD)
keyDown(Key.CMD)
type("w")
keyUp(Key.CMD)
waitVanish([a QuickTime window])
저는 숙련 된 Sikuli 개발자는 아니지만, UI 액션으로 AppleScript에 핵심적인 압박을 가해 야합니다. 그 부분은 어렵지 않습니다. 어려운 선택의 클릭입니다. AppleScript는 Author 속성도 확인할 수 있습니다. 그 내용은 AppleScript 사전에 설명되어 있지만 속성은 읽기 전용입니다.