アットウィキロゴ
Paper Plane xUI まとめサイト
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー
「Script Module」の編集履歴(バックアップ)一覧に戻る

Script Module - (2013/03/25 (月) 23:54:02) のソース

*Paper Plane xUI Script Module
>WSH のように ActiveX Scripting Host を利用してスクリプトを実行する PPx Module の試作品です。PaperPlanexUI0.40+3以降用です。0.35~0.40+2でも制限付きで使用可能です。

&html(<div style="text-align:right">配布元:<a href="http://homepage1.nifty.com/toro/slwin4.html#ppxscr" title="TORO's Software library">TORO's Software library</a></div>)

*簡単な使いかたの説明
**セットアップ
>PPXSCR.DLL を PPx(0.35以降) があるディレクトリ内に用意し、PPx 上で「*script スクリプトファイル名」を実行することでスクリプトを実行することができます。

**実行方法
例えば PPx のディレクトリ(%0)に "hoge.vbs", "fuga.js" というスクリプトがあるとします。

***キーボードに直接割り付ける
  KC_main = { ;例えば Shift + x に割り付ける
    \X , *script %0hoge.vbs
  }

***ctrl + Enter のメニューから実行する
  M_Ccr   = {
    fuga を実行 = *script %0fuga.js
  }

上記の例はいずれも PPc からの実行ですが、その他のモジュールからでも実行できます。動作確認をする場合は付属の "sample.vbs" を実行してみるとよいでしょう。
詳しくは付属の "PPXSCR.TXT" を参照しましょう。

**Tips
***マークしたエントリーを全て処理する
VBScript で書く場合
  '!*script
  ' マークしたエントリの名前を順番に表示する
  
  If PPx.EntryFirstMark = 0 Then
    PPx.Echo "マークはありません"
  Else
    Do
      ' ここで個別の処理を行う
      PPx.Echo "エントリの名前:" & PPx.EntryName
      If PPx.EntryNextMark = 0 then exit do
    Loop
  End If

JavaScript で書く場合
  //!*script
  // マークしたエントリの名前を順番に表示する
  
  if (PPx.EntryFirstMark == 0){
    PPx.Echo('マークはありません');
  } else {
    while(true){
      // ここで個別の処理を行う
      PPx.Echo('エントリの名前:' + PPx.EntryName);
      if(PPx.EntryNextMark == 0) break;
    }
  }


*Script
**マークした複数のファイルの拡張子でフィルタするスクリプト
[[マークした複数のファイルの拡張子でフィルタ>http://www6.atwiki.jp/ppx/pages/13.html#id_5c10cd5d]]

**選択ファイルの別名バックアップをその場で作るスクリプト
例えば test.txt というファイルがあったら test_txt051012.bak というふうに日付のついたファイル名でその場にコピーします。

  //!*script
  // back up with date.
  // This script is in the public domain.
  
  var date = makeDate();
  
  if(PPx.EntryFirstMark == 0 && PPx.EntryName != null) PPx.EntryMark = 1;
  if(PPx.EntryFirstMark == 1){
    while(true){
      var dir = PPx.Extract('%1');
      var entryName = PPx.EntryName;
      var newName = entryName.replace(/^(.*)\.(\w+)$/i, '$1_$2');
      newName += date + '.bak';
      var fs = new ActiveXObject('Scripting.FileSystemObject');
      f = fs.GetFile(dir + '\\' + entryName);
      f.Copy(dir + '\\' + newName, true); // 上書き
      PPx.EntryMark = 0;
      if(PPx.EntryNextMark == 0) break;
    }
  }
  
  function makeDate(){
    /* make yymmdd string */
    var d = new Date();
    var year = d.getFullYear().toString().substr(2,2);
    var month = (d.getMonth() + 1).toString();
    if (month.length == 1 ) month = '0' + month;
    var day = d.getDate().toString();
    if (day.length == 1 ) day = '0' + day;
    return year + month + day;
  }

以上をテキストエディタに貼り付け "backupWithDate.js" とでもして PPx ディレクトリに保存。

  M_Ccr   = {
    日付付きバックアップ = *script %0backupWithDate.js
  }


**選択ファイル名のリストを外部エディタで編集し、一気にリネームするスクリプト
実行すると、選択中エントリのレスポンスファイル(一行ごとにファイル名を書いたテキストファイル)を外部エディタで立ち上げます。そのファイルを編集し、上書き保存の後、エディタを終了すると編集内容の通りに一気にファイルをリネームします。
実行すると「Waiting...」というプロンプトが出てきますが、無視してください。スクリプトの終了後に自動的に消えます。

  //!*script
  // Version 1.29+3 以降用
  // This script is in the public domain.
  // PPc 用スクリプト。
  // 選択エントリーをテキストエディタで一気にリネーム。
  //
  // ===== 設定 =================================================
  // 使用するエディタのパスを設定。パス区切りは '\\'
  // 例 : var editor = 'C:\\Program Files\\sakura\\sakura.exe';
  // SDI のエディタじゃないと終了判定がうまく行かないかも。
  // 空にしておくと PPe で編集。
  var editor = 'D:\\home\\Toolz\\sakura\\sakuraW.exe';
  
  // ============================================================
  
  if(PPx.EntryFirstMark != 1){
    PPx.Echo('マークされたエントリがありません');
    PPx.Quit();
  }
  
  // マークしたファイルのリストを取得
  var listFile = PPx.Extract('%aFCN');
  if(editor && editor != ''){
    // 指定エディタで起動
    var command = '%Obsq \"' + editor + '\" \"' + listFile + '\"';
    PPx.Execute(command);
  }else{
    // 指定エディタが設定されていない場合は PPe で
    PPx.Execute('*edit \"' + listFile + '\"');
  }
  
  // ファイル操作
  var fso = new ActiveXObject('Scripting.FileSystemObject');
  // 編集したファイルを読む
  var newFileNames = [];
  if(fso.FileExists(listFile)){
    var f = fso.OpenTextFile(listFile, 1);
    while(! f.AtEndOfStream){
      newFileNames.push(f.ReadLine());
    }
    f.close();
  }else{
    PPx.Echo('リネームデータを取得できませんでした');
    PPx.Quit();
  }
  
  // エントリのリネーム
  var dir = PPx.Extract('%1%\\');
  for(var i = 0; true; i++){
    var oldName = dir + PPx.EntryName;
    var newName = dir + newFileNames[i];
    
     if ( newFileNames[i]
      && newName != oldName
      && fso.FileExists(oldName) 
      && (!fso.FileExists(newName))
    ){
      fso.GetFile(oldName).Move(newName);
    }else{
      if(newName != oldName){
        PPx.Echo(PPx.EntryName + ' のリネームに失敗しました。\n名前の重複などを確認してください\n'+newName+'\n'+oldName);
      }
    }
    PPx.EntryMark = 0;
    if(PPx.EntryFirstMark == 0) break;
  }
  PPx.Quit();


以上をテキストエディタに貼り付け "batchRename.js" とでもして PPx ディレクトリに保存。

  M_Ccr   = {
    外部エディタでまとめてリネーム = *script %0batchRename.js
  }

**PPx から公開サーバーに FTP でファイルを上げるスクリプト
[[qftp4ppx2.js>http://www6.atwiki.jp/ppx/?cmd=upload&act=open&pageid=19&file=qftp4ppx2.js]]
-[[BASP21 DLL>http://www.hi-ho.ne.jp/babaq/basp21.html]] のインストールが必要です。
-FTPサーバーやパスワード、ローカルのディレクトリの設定などはスクリプトを直接編集します。
-参考:[[指向性メモ::2004-10-07(元になったWSHスクリプト)>http://ishikawa.arielworks.com/memo/2004/10/07/033013]]

&html(<div style="text-align:right"><del>配布元:Note @ Temporary-Depot</del><ins>閉鎖</ins></div>)

*参考サイト
>PPx Script は、WSH と同じように ActiveX Scripting Host を利用していますので、文法や組み込み関数等は、WSH とほぼ同じです。

とあるように、WSH ( Windows Script Host ) 関連の情報はそのまま応用できます。

-[[Windows Script Host>http://www.microsoft.com/japan/msdn/library/ja/script56/html/wsoriwindowsscripthost.asp]]
-[[Windows管理者のためのWindows Script Host入門>http://www.atmarkit.co.jp/fwin2k/operation/wsh03/wsh03_01.html]]
最近更新されたスレッド
ウィキ募集バナー