スクリプトの作成No.04021
tachi さん 13/05/06 20:37
 
最近、秀丸ファイラーを使い始めました。
スクリプトを使うと一定の操作を一つのキーだけで
出来るのではないかと思いました。

一定の操作
1.選択しているフォルダを開く(ENTER)
2.すべてのファイルを選択する(CTRL+A)
3.ファイルを切り取る(CTRL+X)
4.一つ上のフォルダへ移動する(BS)
5.貼り付ける(CTRL+V)

この操作を一つのキーだけでやりたいのですが出来ますか?

ヘルプを見たのですが、よくわかりませんでした。
すみません。


[ ]
RE:04021 スクリプトの作成No.04022
wtr さん 13/05/07 01:30
 
こんばんは。
wtrと申します。

やっつけですが、イメージ的にはこんな感じでしょうか。
ツール項目バーに登録してショートカットキーを割り当てれば、
ひとつのキーで書かれた内容と同様の動作をすると思います。
解説としてコメントを多用しましたが、逆に見づらかったらすいません。

//test.js
//------------------------------------------------------------
//選択項目のインデックスを取得(複数選択の場合は一番上の項目)
var item = GetNextItem(-1,2);

//1つ以上選択されていてかつフォルダかどうかチェック
if (item >=0 && IsFolder(item)) {
 //選択したフォルダを開く
 Open(GetItemPath(item));
 //すべて選択
 SelectAll();
 //切り取り
 Cut();
 //1つ上のフォルダへ
 Command("1つ上のフォルダへ");
 //貼り付け
 Paste();
}
//------------------------------------------------------------

複数選択の場合に、一番上の項目ではなくフォーカス項目を取得したい場合は、
一行目を
var item = GetNextItem(-1,1);
としてください。
複数選択時は、処理しないとしたい場合はもうちょっとチェックが必要になります。

差し出がましいとは思いましたが、ご参考になればと思い投稿させて頂きした。

[ ]
RE:04022 スクリプトの作成No.04023
tachi さん 13/05/07 05:49
 
思い通りのことが出来ました。
ありがとうございました。

[ ]
RE:04023 スクリプトの作成No.04060
tachi さん 13/05/23 03:46
 
すみません。
もう一つ、わがままをさせてください。

6.空になったフォルダを削除

を追加したいです。
自分でも調べてやってみたのですが
エラーになってしまって。
何度も聞いてすみません。


[ ]
RE:04060 スクリプトの作成No.04062
wtr さん 13/05/23 17:46
 
こんにちは。
wtrです。

カット&ペーストの処理は非同期で行われるようで
単純にスクリプトの最後にフォルダ削除の機能を追加すると
ペースト前にフォルダが削除されてしまう可能性があります。

とりあえずの対策として、適当な秒数待機するようにしました(確実ではないですが
…)。
サンプルでは、1000ミリ秒(1秒)の待機ですが環境に合わせて数字を変更してください。
(その他の方法としましては、フォルダが空になるまで
ループしてチェックするという方法もあるにはありますが…)

前回のサンプルに修正を加えたものを記載します。

//test.js
//------------------------------------------------------------
//選択項目のインデックスを取得(複数選択の場合は一番上の項目)
var item = GetNextItem(-1,2);

//1つ以上選択されていてかつフォルダかどうかチェック
if (item >=0 && IsFolder(item)) {
 //選択したフォルダを開く
 Open(GetItemPath(item));
 //パスをコピー
 var dir = GetDirectory();
 //すべて選択
 SelectAll();
 //切り取り
 Cut();
 //1つ上のフォルダへ
 Command("1つ上のフォルダへ");
 //貼り付け
 Paste();
 //1秒待機(環境によって値を変更して下さい)
 Sleep(1000);
 //フォルダ削除
 var fso = new ActiveXObject("Scripting.FileSystemObject");
 fso.DeleteFolder(dir);
 fso = null;
}
//------------------------------------------------------------

[ ]
RE:04062 スクリプトの作成No.04063
wtr さん 13/05/23 17:51
 
一点注意して頂きたいのは、
例えば、ペースト先にすでに同名ファイルが存在していた場合に、
「上書きしますか?」の確認ダイアログが表示され、
まだペーストが行われていない場合でも
指定秒数後には、無条件でフォルダ削除が実行されてしまいます。
扱いには十分に注意して頂きますようよろしくお願いします。

個人的には、ワンアクション増えてしまいますが、
フォルダ削除は自動にはせず手動で削除することをおすすめします。
取り返しの付かないことになる可能性もありますので。

[ ]
RE:04063 スクリプトの作成No.04064
tachi さん 13/05/23 20:38
 
思うように出来ました。
本当に何から何までありがとうございました。
これからはこれを参考に自分でも勉強します。

[ ]