2016-09-03 21 views
0

AppleScriptが新しく、ファイルを安全に消去するためのスクリプトを作成しました。ファイル選択ダイアログと確認が表示され、ファイルが消去されます。しかし、ドラッグアンドドロップ機能を追加しようとしたとき、みんなが言うべきように機能しません。アイコンはハイライトされません(ドラッグアンドドロップが機能していることを示しています)。Finderはアプリにドラッグするのではなく、ファイルをアプリのフォルダにコピーします。ここでAppleScriptのドラッグアンドドロップが機能しない

が正常に動作し、元のスクリプトは、(「ワイプFile.app」として保存された)である:

on run 
    set the_file to choose file with prompt "Select the file to wipe:" 
    wipe_file(the_file) 
end run 

to wipe_file(file_to_wipe) 
    set file_to_wipe to POSIX path of file_to_wipe 
    set ok_to_wipe to display dialog "Are you sure you want to wipe \"" & file_to_wipe & "\"?" buttons {"Cancel", "OK"} default button "Cancel" 
    set ok_to_wipe to button returned of ok_to_wipe 
    if (ok_to_wipe = "OK") then 
     tell application "Terminal" 
      activate 
      do script "set prompt='';cls;srm -v \"" & file_to_wipe & "\"" 
      delay 3 
      close front window 
      set still_active to count windows 
      if still_active = 0 then 
       quit 
      end if 
     end tell 
    end if 
end wipe_file 

それから私は先頭に次を追加しました。スクリプトを実行すると、ファイル選択ダイアログが表示されますが、システムはドラッグアンドドロップを許可しません!

私が見たところ(Google、スタックのオーバーフロー)は、このアプローチはうまくいくはずですが、そうではありません。私もブロックon run...を取り除こうとしましたが、ちょうどon open...のままですが、スクリプトは何もしません。

EDIT

私は上記の内容で新しいスクリプトを作成し、アプリケーションフォルダにコピーし、アプリとしてそれを保存し、その上にカスタムアイコンを貼り付けた場合は、ドラッグ&ドロップで動作します。しかし、もともと「オープン」のサポートを持たなかった古いスクリプトは、「オン・オープン」サポートがスクリプトに追加された後でもまだ動作しません。だから私は、Appleがドラッグアンドドロップをサポートするための特別な属性を設定しなければならないと思っています。なぜなら何らかの理由で(私が最初に保存したときにそれがなかったからです) 。両方のアプリケーションのための情報やパッケージの内容を表示ゲットを見てみると、いくつかの奇妙な違いがあります。

  1. 新しく作成された(作業)アプリは唯一の693キロバイトですが、(おそらく同じ、しかし壊れた)古いものは9.4ですMB!
  2. 新しい(作業中の)アプリケーションには「液滴」というファイルがありますが、古いもの(破損したもの)には「アプレット」というファイルがあります。

最初のものは奇妙なもので、何らかのファイル破損が考えられましたが、第2のものは明らかにAppleがドラッグアンドドロップで使用する魔法の設定です。私は、作業中のスクリプトから「開いている」ブロックを削除して保存した場合、アップルはを実行しないことを確認しました "ドロップ"矢印を削除するスクリプトアイコンを更新します。何も起こりません。

アップルは、スクリプトがドラッグ&ドロップをサポートしているかどうかを判断します。スクリプトを保存して初めてかどうかは決まっていません。

答えて

0

端末を開いてウィンドウを開く必要はありません。 'do shell script'はすでにシェルセッションをバックグラウンドで開き、Terminalでは表示されません。エラーが発生した場合にスクリプトが停止するのを避けるために、 'try/end try'ブロック内で使用する必要があります。

また、オプションv(冗長)で 'srm'を使用しています。このオプションは、何が行われているかを表示するために使用されますが、ウィンドウを閉じるために表示されません。

あなたのファイルパスにシェルでエスケープする必要がある特殊文字が含まれている可能性もあります。これを避けるには、 'quoted form of'を使用してください。

スクリプト怒鳴るはOKテストされます。

on run 
set the_file to choose file with prompt "Select the file to wipe:" 
wipe_file(the_file) 
end run 

on open the_files 
repeat with the_file in the_files 
    wipe_file(the_file) 
end repeat 
end open 

to wipe_file(file_to_wipe) 
set file_to_wipe to POSIX path of file_to_wipe 
set ok_to_wipe to display dialog "Are you sure you want to wipe \"" & file_to_wipe & "\"?" buttons {"Cancel", "OK"} default button "Cancel" 
if (button returned of ok_to_wipe = "OK") then 
    try 
     do shell script "srm " & quoted form of (file_to_wipe) 
    end try 
end if 
end wipe_file 
+0

私は、ターミナルウィンドウを開き、SRMのための冗長オプションを使用する理由は、それが行くように、私は進歩を見ることができるそうです。私は "遅延3"を持っているので、ウィンドウが閉じられる前に3秒間結果が表示されます。 – GTB

+0

私はあなたのスクリプト(デスクトップ上にアプリケーションとして保存されています)を試してみましたが、確認ウインドウはありませんでしたが、ドラッグ&ドロップで動作しました。それからあなたのスクリプトをコピーして貼り付けました。また、ドラッグアンドドロップのために冗長な確認ウィンドウが表示されていました。しかしそれは動作しないスクリプトの正確なテキストコピーですが、アプリケーションフォルダにはなく、カスタムアイコンがありません。私は、a)作業スクリプトをアプリケーションにコピーしてみましょう。 b)作業中のスクリプトにカスタムアイコンを入れて、それが壊れているかどうかを確認します(スクリプトアイコン上に特別な「ドロップ」矢印が表示されたときにカスタムアイコンを考えました)。 – GTB

+0

あなたの助けをありがとう、それは実際の問題ではありませんでしたが、それは私が問題を発見するように導きました(私の編集された質問を参照)。明らかに、アップルは「オープン」の存在に基づいて、ファイルを「アプレット」か「ドロップレット」かにかかわらず最初に保存するかどうかを決定します。追加するコンテンツを編集しても変更されませんまたは「開いている」ブロックを削除してください。また、私はあなたの "引用フォーム"と "try ... end try"ブロックを元のスクリプトに組み込みました。 – GTB

関連する問題