我几天前制作了这个下载脚本:
do shell script "curl -L -o ~/Desktop/file.dmg 'https://download.mozilla.org/?product=firefox-27.0.1-SSL&os=osx&lang=en-GB' > ~/Desktop/status 2>&1 &"
set fileSize to 0
set curTransferred to 0
set curProgress to 0
repeat until curProgress = "100"
try
set lastLine to paragraph -1 of (do shell script "cat ~/Desktop/status")
set curProgress to word 1 of lastLine
set fileSize to word 2 of lastLine
set curTransferred to word 4 of lastLine
tell me
display dialog "Downloading. Please wait...
Status: " & curTransferred & " of " & fileSize & " (" & curProgress & "%)" buttons {"Refresh", "cancel"} giving up after 4
if the button returned of the result is "cancel" then return
end tell
on error
display dialog "Something went wrong when downloading the file. If you would like to restart the download then press the button 'Retry'" buttons {"Quit", "Retry"} with icon 0
end try
end repeat
它有效,但我仍然遇到了一些问题(确切地说是3个问题) 问题一:
有没有办法只显示CurTransferred,FileSize和Curprogress,而不是每隔4秒显示一个新窗口来显示/刷新(新)信息?
问题二:
AppleScript中有没有办法制作一种“暂停”按钮(在这个脚本中)?因此,当点击暂停时,下载将停止,并且将使用“继续”或“开始”按钮打开一个新对话框?
第三个问题:
有没有办法将~/Desktop/file.dmg
更改为像这样的代码:
set downloadlocation to (choose folder)
然后在脚本中使用path to (downloadlocation)
而不是~/Desktop/file.dmg
如果您知道某个问题(或所有问题)的答案,请随时回答这个问题!
感谢阅读,
Jort
PS:也许对Internet连接的检查会很酷但不是必需的。
答案 0 :(得分:1)
第一个问题:
没有
问题二:
没有
第三个问题
set downloadLocation to choose folder with prompt "choose download location"
do shell script "curl -L -o " & quoted form of (POSIX path of downloadLocation & "file.dmg") & " 'https://download.mozilla.org/?product=firefox-27.0.1-SSL&os=osx&lang=en-GB' > ~/Desktop/status 2>&1 &"
使用纯AppleScript无法解决第一和第二个问题,因为AS在单个线程中同步工作。由于shell脚本设置为不等待完成,除了从状态文件中读取输出之外,无法控制进度。