Mac OS X 提供至少兩種的 Scripting 的方式。一種是承繼 Classic Mac OS 而來的 AppleScript,AppleScript 是一套類似英文的語法,而我這一個月來都在玩這套東西,而因為兩三個星期前去撿來兩台舊型的麥金塔電腦來玩(一台 Mac SE 還有一台 LC,其中主要在玩那台 SE),玩了一下裡頭的 HyperCard,才知道原來 AppleScript 基本上就是沿用當年 HyperCard 的語法。
而因為 Mac OS X 的底層其實是 BSD,所以也可以使用各種 shell script,執行各種 unix 指令—某方面來說,Mac OS X有趣的地方就在於這套作業系統有來自各種平台的各種亂七八糟的東西,在底層有各種 unix 的功能可以使用,在 Aqua GUI 下又有繼承自 Classic Mac OS X 以及 NextStep 的玩意兒,也提供 X11 環境,彼此之間又可以互相呼叫。以 AppleScript 來說,便可以使用 do shell script 這個語法呼叫 shell script,所以,可以用 AppleScript 做為簡易的 GUI,然後用 shell script 進行各項其他的工作,而有些事情實在搞不清楚怎麼用 AppleScript 做的時候,拿 shell script 來幹,實在比較輕鬆愉快。
就拿這兩天隨便亂寫的一個 AppleScript 來說,這段程式的功能就是用來清理桌面,如果您和我一樣經常在桌面沒事存了一堆有的沒有的檔案,看得意亂心煩,這個程式可以在您的個人目錄下的「桌面檔案備份」目錄中,建立一個以目前時間為名稱的目錄,然後把桌面上的檔案一次搬移過去。程式碼如下:
on myClean()
set myDate to (the (current date) as string)
set myExt to ""
set nums to count myDate
repeat with i from 1 to count myDate
set this_item to item i of myDate
if this_item is equal to ":" then
set myExt to myExt & "-"
else if this_item is not equal to " " then
set myExt to myExt & this_item
end if
end repeat
set myBackupHome to "~/桌面檔案備份/"
set myFolder to myBackupHome & myExt & "/" as string
try
do shell script "mkdir " & myBackupHome
end try
set myDesktop to (POSIX path of (path to desktop) as string)
set myMSG to do shell script "ls " & myDesktop
if myMSG is equal to "" then
display dialog "桌面上沒有東西,不需要清理!" buttons {"好"}
else
do shell script "mkdir " & myFolder
set myScript to "mv " & myDesktop & "* " & myFolder & "."
do shell script myScript
display dialog "您桌面上的檔案已經搬移到了「" & myFolder & "」了" buttons {"好"} default button 1
do shell script "open " & myFolder
end if
end myClean
display dialog "這個程式會將您桌面上的所有檔案,移到您個人目錄下的「桌面檔案備份」目錄,並且按照時間整理,讓您有一個乾淨清爽的桌面。您確定要清理桌面嗎?" buttons {"好", "取消"} default button 2
if the button returned of the result is "好" then
myClean()
end if
這段程式會先跳出一個提示視窗,詢問您是否確定要進行清理。
確定之後,先會用 ls
這個指令確認桌面上有沒有檔案,但是這裡又是透過 AppleScript 的 (path to desktop)
取得桌面的路徑,而其實用 "ls ~/Desktop/"
也是可以的。如果桌面上沒有東西,就會停止,反之,就是試著用 mkdir 指令建立 "~/桌面檔案備份/"
目錄,並且根據 AppleScript 中的 (current date)
取得現在的時間,並且用 AppleScript 的迴圈語法,把不適合用於目錄名稱的部份過濾掉,例如,蘋果會把冒號(:)當成路徑符號處理,還有多餘的空白等,這些東西都是我們不要的。接下來再用 mkdir
建立目錄,以及用 mv
搬移檔案,最後再透過 AppleScript 的 display dialog
語法,跳出訊息視窗。
Hi, Thanks for the wonderful article. I would like to ask a question: what happens if the command in “do shell script “cmd ” takes two argument? I tried
“do shell script “cmd” & x & y
but it didn’t work … 🙁
Thanks for your help on this issue.
You should not quote “do shell script” in quotation marks…BTW, while you are using the ampersand (&) trying to put in more than two arguments, AppleSciprt see such syntax as you are trying to join more than two strings into one string, for instance, ‘”cmd” & x * y’ should be a complete string indeed.
So, you may try set the variable type first such as:
set x to "rm" as string
set y to " -rf *" as string
Pingback: :::zonble’s promptbook » 桌面時光機:::
Pingback: 練習:AppleScript-1 @ 幻想惑星 Fantay Planet