「AppleScript,Perl,Shell」OS Xでスクリプトスレ
まず
perl -cw test.pl
で文法チェックしてみる。
OKなら次にデバッグ
perl -d test.pl
s (Single step)で1行づつ実行
てな話が無いのは
>>912へのいじめか何かですか?
> いじめか何かですか
931 :
名称未設定:04/04/30 20:42 ID:svl+Wub0
指定したフォルダのリストを取得して、指定のHTMLにリンクとして上書きする
というスクリプトを作ってまつ。が、うまい書き出し方が思いつかん。orz
set thePath to "hoge" as alias
set theList to list folder of thePath without invisibles
repeat with theItem in theList
set theText to "<A HREF=\"" & thePath & theItem & "\">" & theItem & "</A>"
end repeat
とりあえずここまで作った(短いなオイ)。
repeat文の前後にHTMLに必要なタグを書けば良いと思うが、
うまい事HTMLに書き出す/上書きする方法がわからない……。
誰か知恵を貸してくれ(´・ω・`)
932 :
912:04/04/30 22:29 ID:gOiFajp3
みなさんどうもありがとうございました。
解決しました。
まず
>>926さんの言ったとおり1行目と2行目を削除し、
>>925さんのとおりドラッグ&ドロップしてみたら成功しました。
#以降のコメントに不具合があるということがわかったので、
いろいろ調べてみたら改行コードがCRになってました。
最初の方で指摘されていたにもかかわらず…五里霧中で…
>>914さん、
>>928さんありがとうございました。
結局LFに指定し直してターミナル上で cd Perlとし、
% perl test.pl
でうまく引き出すことができました。
休日出社&残業でレスが遅くなりご迷惑をおかけしました。
これからも頑張ってみたいと思います。
933 :
931:04/05/01 00:37 ID:THN96K/W
手堅くopen for access命令で逝く事にしますた。一応報告。
934 :
名称未設定:04/05/01 01:15 ID:k3P9SBWy
>>931 open for access で保存するのはいいとして、
theTextはリストにしなくていいの?
set theText to {}
repeat with theItem in theList
set end of theText to "<A HREF=\"" & thePath & theItem & "\">" & theItem & "</A>"
end repeat
AppleScriptで毎日0時に、フォルダ名変更って可能ですか?
その日の日付で「2004-05-01」みたいに。
フォーマット済み日付ならこれで取得できるだろ
do shell script "date +%Y-%m-%d"
後は名前変えれ。
>>937 時間を作って自力でアレコレやってみるっす。
ありがと。
>>934 無理矢理、こんな考え方でやってみるとか・・・
試してないけど。
set Dialog_1 to "禁煙時間 " & Y of ret & "年 " & ((mo of ret /30) + d of ret) & "日 " & h of ret & "時間" & mi of ret & "分"
940 :
934:04/05/01 02:10 ID:k3P9SBWy
>>939 いや、本当に普通に……
年と月のカウントを無くし、日数(と時間)だけでカウントさせて
表示できれば良いんです。
よろしくお願いします。
また禁煙カウンタの話か。
結構使ってる人多いんだねえ。
>>940 set Dialog_1 to "禁煙時間 " & (Y of ret)*365 + (mo of ret)*30 + (d of ret) & "日 " & h of ret & "時間" & mi of ret & "分"
Dialog_5も同じ。
本当はMake_ymdhmのルーチンごと書き直すべきなんだろうけど
943 :
934:04/05/01 09:23 ID:o4Nzm7tu
>>942 ありがとうございます。
禁煙がんがります!
944 :
939:04/05/01 12:18 ID:zUnrTbBV
>>942 あ、そうか、mo*30じゃないと意味ないよね。
何を考えているんだ俺はw
945 :
931:04/05/01 20:15 ID:THN96K/W
>>935 それだ!
それだよ、俺が知りたかったのは正にそれだ。
実はrepeat毎にwrite命令やってたりして……。
量が増えたら激しく面倒な方法とってますた。
サンクス(・∀・)
>>935 いままでテキストをくっつけて改行区切りにするとき
set theText to theText & "hoge" & return
ってやってたけど
set end of theText to "hoge"
で、最後に
set AppleScript's text item delimiters to {return}
theText as string
ってやった方が見やすくて、tab区切りとかに簡単に変えられるし
早くなるかもしれないと思った。
まだまだ知らない技があるなあ・・・。
set visible of processes whose name is not "Finder" and name is not "DragThing" to false
の様に書くのがスマートじゃないので
property dontHideApp : {"Finder", "DragThing"}
tell application "Finder"
set visible of processes whose name is not in dontHideApp to false
activate
end tell
の様にしたいのですが、実行時にエラーがでます。
実行時には
whose {"Finder", "DragThing"} contains name
で評価されるのでエラーが出るようなのですが
なんとかなりませんでしょうか?
property dontHideApp : {"Finder", "DragThing"}
repeat with anItem in dontHideApp
tell application "Finder"
set (visible of processes whose name is not anItem) to false
activate
end tell
end repeat
あ、逆にせな。^^;
>>948 レスありがとうございます。
whoseで1行は無理ということでしょうか
関係ない話ですが
AppleScriptの実行ソフトとしてButlerっていいですね。
簡単にメニューバーにボタン形式で置けるし、
スペースがもったいなかったらホットコーナーもある。
ホットコーナーはクリックで作動するので誤作動の心配はほとんどないし
右クリックで左クリックとは違うスクリプトを実行できたりと感動しました。
悲しいことに、アプリケーション形式で保存せず、
外部アプリからスクリプト書類を走らせる方が安心なんだよな。
日本語バグのせいで。・゚・(ノД`)・゚・。
アプリケーションバンドルにJapanese.lprojを作ってやるのではなくて?
sedやperlで置換文字列にtabを指定することはできないのでしょうか?
\t
拡張子を判別して処理を分岐させたくて
下記のようなスクリプトを書いてみたのですがうまくいきません。
tell application "Finder"
get name extension of (choose file)
end tell
set ext to result
if ext is in {"dmg", "iso", "toast"} then
display dialog ext
else
display dialog "error"
end if
お知恵をお貸しください。
>>955 これ自体はちゃんと動いてるみたいだけど。
他の部分で問題があるのかも?
ちなみに頭4行は
tell application "Finder"
set ext to name extension of (choose file)
end tell
にしたほうが間違いがない。
>>956 なるほど、勉強になります。
でもたとえばdmgファイルを選択したとして、
errorのほうのダイアログが出てきちゃうんです。
if ext is in {"dmg", "iso", "toast"} then
の行をたとえば
if ext is "dmg" then
とすると、うまくダイアログでdmgと表示されるんです。
>>957 そりゃ変だね。どうしてもだめならorで判断させる。
>>958 if ext is "dmg" or "iso" or "toast" then
こうですか?
これだとdmgの場合OKだけどisoやtoastを開いたときに
errorになりました。
なんだか良く分かりませんがもうちょい調べてみます。
レスどうもです。
if
ext is "dmg"
else if
"iso"
else if
"toast" then
end if
うわ途中で書きこんじまった。
if
ext is "dmg" 〜
else
ext is "iso" 〜
else
ext is "toast" 〜
end if
みたいな書き方はOKなんだっけ?
962 :
959:04/05/06 00:57 ID:NsnRbFq6
>>961 それでいけると思いますが簡潔にしたかったもので。
で、いろいろ試行錯誤した結果
if (ext is "dmg") or (ext is "iso") or (ext is "toast") then
とすることでちゃんとした結果が得られました。
再度、レスしてくれた方々ありがとう。
また、何故
if ext is in {"dmg", "iso", "toast"} then
とか
if ext is "dmg" or "iso" or "toast" then
みたいな書き方じゃだめなのか説明できる人がいたら
よろしくお願いします。
963 :
959:04/05/06 01:39 ID:NsnRbFq6
最後に。
on open theFiles
repeat with anItem in theFiles
tell application "Finder"
set ext to name extension of anItem
end tell
if (ext is "dmg") or (ext is "iso") or (ext is "toast") then
launch application "Toast 6 Titanium"
tell application "Toast 6 Titanium"
mount image anItem
end tell
end if
end repeat
tell application "Toast 6 Titanium" to quit
end open
こんなスクリプトが出来上がりました。
改善すべき所とかあったらよろしくお願いします。
if {"dmg", "iso", "toast"} contains ext then
で期待通りの動きをするような気もする。
launch application "Toast 6 Titanium"
は不要なような気もする。
>>964 launchはToastのアプリケーションウィンドウが開くのを回避しているものと思われ。
966 :
965:04/05/06 03:55 ID:IG2MYn1A
>>963 「launch application "Toast 6 Titanium"」はrepeatの外に追い出した方がいいと
思う。該当するファイルがなかった場合無駄に立ち上げちゃうことになるけれど、
二回目以降必要ない命令が繰り返されるのはちょっといやな感じ。折角quit命令も
repeat外にあることだし。
967 :
959:04/05/06 22:54 ID:NsnRbFq6
>>964 試してみたけどうまくいきませんでした。
>>966 そのほうがいいですかね。
Toastが無駄に立ち上がっちゃうのがいやだったので。
tell application "Finder"
if name of every process contains "Toast Titanium" then tell application "Toast 6 Titanium" to quit
end tell
こうすれば該当するのがなくても無駄にtoastが立ち上がることはないかな。
toastは5も6もプロセス名は"Toast Titanium"だけど。
それにしても959さんはリストのif文がうまくいかないのはなんでだろうね。
AppleScriptのバージョンの違いとかあるのかな?
>>968 数年前試した時にはその記述法ではできなかった気が。非常に不確かな記憶だけど。
>>895 AppleScript 1.9.3を使っているので試してみようと思い次のように書きましたがエラーがでます。
tell application "Finder"
choose file default location disk "Macintosh HD"
end tell
エラー文は
「Finder でエラーが起きました:disk "Macintosh HD" を item にできません。」です。
どうやったらいいのか教えてください。
alias
972 :
970:04/05/07 19:48 ID:3ATEIP4+
>>971 ありがと〜〜〜!
choose file default location disk "Macintosh HD" as alias
でいっちゃいました!
>970
テキトーにやるのではなく、ちゃんと用語説明を読もう。
choose file
[default location alias] -- the default file location
つまりalias型で渡してやらんとダメ。
例えば
tell application "Finder"
set TheDisk to (disk "Macintosh HD" as alias)
choose file default location TheDisk
end tell
とか。
もう一度言うけど、テケトーにやるのではなく、ちゃんと用語説明を読め。
974 :
970:04/05/08 19:14 ID:8FgKRejr
applescriptでアプリケーションをつくっています(xcode)
AppleScriptKit.asdictionaryを見ると、
Control View Suite→Class button: A button→Properties:
に
titleやbezel styleやimageといったものがあります。
title、bezel styleは問題なく使えるのですが、
imageが使えません。
助言おねがいします。
>974
昨日の君の悩み(>970)と似ているな。引数の型を意識しろってばさ。
imageはimage 型で渡してやらないとダメ。
プロジェクトにNantara.tiffなどと画像ファイルが登録されているとして、それを表示させるには
set Myimage to (load image "Nantara") -- load image コマンドで画像ファイルをimage型に
set image of button "ボタンの名前" to Myimage
でどうですか。
976 :
970:04/05/08 20:15 ID:8FgKRejr
>>975 ありがとうございます。
ビルドまではうまくいきましたが、実行するとエラーがでます。
体系的に勉強できるサイト・本はありませんか?
ぜんまいびゅんびゅん(?)とやらを買ったほうがよいのでしょうか。
きちっと勉強せずに人にきいてばかりなので出直してきたいと思います。
>976
サイト
>>4 または/Developer/Documentation/AppleScript内のhtmlドキュメント(英語)
本
・AppleScript そのものの本
・AppleScript で何かやろうという本
・AppleScript とXcode (AppleScript Studio)で何か作ろうという本
などいろいろあるので自分の現状・欲求に即して選ぶと良い。
う〜ん。いいIDだ。(w