*[PPx]スクリプトメモ エントリマーク3種

汎用化して引数で動作モードを切り替えようかとも思うのだが・・・
引数の判定ロジックの方が本体より長くなりそうなのでやめた。

カーソル位置から最初のエントリまで選択マーク

//!*script
// カーソル位置から最初のエントリまで選択マーク Ver 2.0
// ============================================================
var i        = 0;          // ループインデックス;
var sI       = 0;          // 開始インデックス
var eI       = 0;          // 終了インデックス
var EntryObj = PPx.Entry;  // PPxエントリコレクション

sI = 1;
eI = PPx.EntryIndex;

for (i=sI;i<=eI;i++) {
     EntryObj.Index = i;
     EntryObj.Mark  = 1;
}

PPx.Quit();

カーソル位置から最後のエントリまで選択マーク

//!*script
// カーソル位置から最後のエントリまで選択マーク Ver 2.0
// ============================================================
var i        = 0;          // ループインデックス;
var sI       = 0;          // 開始インデックス
var eI       = 0;          // 終了インデックス
var EntryObj = PPx.Entry;  // PPxエントリコレクション

sI = PPx.EntryIndex;
eI = EntryObj.count;

// マークループ処理
for (i=sI;i<=eI;i++) {
     EntryObj.Index = i;
     EntryObj.Mark  = 1;
}

PPx.Quit();

最後にマークしたエントリからカーソル位置まで選択マーク

//!*script
//!*script
// A-B間選択マーク Ver 1.2
// A点:マークエントリ ※事前にマークが必要
// B点:カーソル位置エントリ
// ============================================================
var i        = 0;          // ループインデックス;
var sI       = 0;          // 開始インデックス
var eI       = 0;          // 終了インデックス
var EntryObj = PPx.Entry;  // PPxエントリコレクション
var RetCD    = '';         // 戻り値ワーク
var command  = '';         // PPxコマンドワーク

// マークチェック
if (PPx.EntryMarkCount == 0) {
    command = '%"' + (PPx.ScriptName).replace(/^.+\\(.+$)/,'$1') + '"'
            + '%:%I"マークなしエラー。"';
    PPx.Execute(command);
    PPx.Quit(-1);
}

// マーク位置取得
RetCD = EntryObj.LastMark;
if (RetCD != 1) {
    command = '%"' + (PPx.ScriptName).replace(/^.+\\(.+$)/,'$1') + '"'
            + '%:%I"内部エラー。カーソル移動に失敗しました。"';
    PPx.Execute(command);
    PPx.Quit(-1);
}

// A-B点チェック
if (PPx.EntryIndex == EntryObj.Index) {
    command = '%"' + (PPx.ScriptName).replace(/^.+\\(.+$)/,'$1') + '"'
            + '%:%I"カーソル位置指定エラー。"';
    PPx.Execute(command);
    PPx.Quit(-1);
}

// ループ点確定
if (PPx.EntryIndex > EntryObj.Index) {
    sI = EntryObj.Index + 1;
    eI = PPx.EntryIndex;
} else {
    sI = PPx.EntryIndex;
    eI = EntryObj.Index - 1;
}

// マークループ処理
for (i=sI;i<=eI;i++) {
     EntryObj.Index = i;
     EntryObj.Mark  = 1;
}

// 後処理
PPx.Quit();

*[PPx]スクリプトメモ マーク対応リネーム

//!*script
// @R置き換えスクリプト Ver 2.3
// 引数:\R:拡張子変更 それ以外:ファイル名変更
// X_esel = 1,0を想定
// ============================================================
//^変数宣言
var arg     = '';    // 引数:呼出モード
var command = '';    // PPxコマンドワーク

//引数取得
arg = PPx.Arguments.Item(0);  //0オリジン

// 引数判定
if (arg != '\\R') {
   command = '%K"@R"';                   //ファイル選択(通常)
// command = '%k"^A" %K"@R"';            //全選択
// command = '%k"\\^A" %K"@R"';          //選択解除
} else {
   command = '%k"\\^A \\END" %K"@R"';    //拡張子(.込み)選択
// command = '%k"\\^A @F2 @F2" %K"@R"';  //拡張子(.除き)選択

}
// ヒストリ使用禁止
PPx.Execute('*setcust K_edit:UP,');
PPx.Execute('*setcust K_edit:DOWN,');

// マーク終了までリネーム(後聞き)
do {
   PPx.EntryFirstMark;  //マーク先頭エントリに位置付け
   if ( PPx.Execute(command) != 0 ) {
      break;
   }
} while( PPx.EntryMarkCount != 0);

// ヒストリ使用禁止解除
PPx.Execute('*setcust K_edit:UP=@UP');
PPx.Execute('*setcust K_edit:DOWN=@DOWN');
PPx.Quit();

*[PPx]スクリプトメモ Alcohol 52%

ディスクイメージをマウントするスクリプト
エラーメッセージはAlcohol 52%が出すのでスクリプト中ではコメントアウト

//!*script
// Alcohol 52%マウントルーチン Ver 2.1
// 引数:マウント対象ドライブ番号
// 使用エイリアス:Alcohol
// ============================================================
//^変数宣言
var command   = '';  // PPxコマンドワーク
var WSHObj    = '';  // wshシェル
var fName     = '';  // マウントファイル(引数2)
var RetCD     = '';  // 戻り値

WSHObj = new ActiveXObject('WScript.Shell');

// アンマウント処理
//command = PPx.Extract('%\'Alcohol\'')
//        + ' '
//        + PPx.Arguments.Item(0)
//        + ': /u"';
//RetCD   = WSHObj.run(command,0,true);  // リターンコードは無視

// ファイル名取得
fName = PPx.Extract('%FDN%\\%R');
fName = fName.replace(/%/g,'%%');

// マウント処理
command = PPx.Extract('%\'Alcohol\'')
        + ' '
        + PPx.Arguments.Item(0)
        + ': /m:"'
        + fName
        + '"';
RetCD   = WSHObj.run(command,0,true);

// 後処理
WSHObj = '';
if (RetCD == 0) {
    PPx.Quit();
} else {
//    command = '%"' + (PPx.ScriptName).replace(/^.+\\(.+$)/,'$1') + '"'
//            + '%:%I"マウントに失敗しました。中断します。"';
//    PPx.Execute(command)
    PPx.Quit(-1);
}

*[PPx]スクリプトメモ 部分カスタマイズファイルの一括取込

気がついたら部分カスタマイズファイルが増えすぎていたので
キー一発で取り込めるように作成。

//!*script
// cfgファイル一括取込 & ppx.cfgへ統一 Ver 2.0
// ============================================================
var pDir     = '';    // PPxディレクトリ
var pCust     = '';   // ppcustwフルパスファイル名
var WSHObj   = '';    // シェルオブジェクト

pDir  = PPx.Extract('%0%\\');    // PPxディレクトリ確定
pCust = pDir + 'ppcustw.exe';

WSHObj  = new ActiveXObject('WScript.Shell');
WSHObj.run('"' + pCust + '" cs "' + pDir + 'ppx.cfg"',0,true);
WSHObj.run('"' + pCust + '" cs "' + pDir + 'ppx.apl.cfg"',0,true);
WSHObj.run('"' + pCust + '" cs "' + pDir + 'ppx.key.cfg"',0,true);
WSHObj.run('"' + pCust + '" cs "' + pDir + 'ppx.cr.cfg"',0,true);
WSHObj.run('"' + pCust + '" cd "' + pDir + 'ppx.cfg"',0,true);

WSHObj = '';
PPx.Quit();

*[PPx]スクリプトメモ ファイル名の一括連番リネーム

もともとは私家版の「エディタを使って一括リネーム」から
連番リネーム部分を切り出したサブセットだったのだが・・・。
テスト中に拡張子判定をPPxの設定に合わせて厳密にやる必要が
あることに気づき、いつの間にか全面書き換えしていたという。(笑)

ディレクトリにも拡張子を持たせる
・ファイル名中にピリオドは絶対含めない
・拡張子のないファイルは認めない
・絶対にファイル名を重複させない自信がある
人には冗長なだけのスクリプト

//!*script
// カレントディレクトリ中の全ファイル(ディレクトリ除く)を
// 000からの連番(3桁)リネーム Ver2.0
// ============================================================

//^変数宣言
var OldFile  = [];    // リネーム前ファイル名格納配列
var OldExt   = [];    // リネーム前ファイル拡張子格納配列
var i        = 0;     // 配列インデックス
var iDir     = '';    // 入力ファイルディレクトリ
var OldName  = '';    // リネーム前ファイル名ワーク
var NewName  = '';    // リネーム後ファイル名ワーク
var FListX   = '';    // PPxレスポンスファイル名(ファイル名)
var FListT   = '';    // PPxレスポンスファイル名(拡張子)
var MaxLoop  = '';    // PPxマークエントリ数
var command  = '';    // PPxコマンドワーク
var StmObjX  = '';    // ストリームオブジェクト(ファイル名)
var StmObjT  = '';    // ストリームオブジェクト(拡張子)
var prefix   = '';    // 接頭辞入力ワーク
var nowdate  = '';    // 日付オブジェクトワーク

// 確認メッセージ
command = '%"' + (PPx.ScriptName).replace(/^.+\\(.+$)/,'$1') + '"'
        + '%:%QN"全ファイルを連番リネームしますか?"';
if (PPx.Execute(command) != 0) {
    PPx.Quit();
}

// 接頭辞問い合わせ ※予約語:DATE入力時は当日日付に置き換え
    prefix = PPx.Extract('%"prefix"%ex%E');
    if (prefix == 'DATE') {
        nowdate = new Date();
        prefix  = nowdate.getFullYear()
                + ('0' + (nowdate.getMonth()+1)).replace(/.?(..$)/,'$1')
                + ('0' + nowdate.getDate()).replace(/.?(..$)/,'$1')
                + '_';
        nowdate = '';
    }

// 入力ディレクトリ確定
iDir = PPx.Extract('%FDN%\\');
iDir = iDir.replace(/%/g,'%%');  // ディレクトリ名に%が含まれている場合の対処

// マスク解除
PPx.Execute('*maskentry');

// 名前順ソート
PPx.Execute('*sortentry &N\t名前順');

// マーク
PPx.Execute('%K"@HOME"');     // ファイルのみマーク
//PPx.Execute('%K"@END"');    // 全エントリマーク
if (PPx.EntryMarkCount == 0) {  // マーク数チェック
	PPx.Echo('対象ファイルがありません。')
    PPx.Quit(-1);
};

// レスポンスファイル作成
FListX = PPx.Extract('%a*8FXN');  // ファイル名のみ
FListT = PPx.Extract('%a*8FTN');  // 拡張子

// streem設定
StmObjX = new ActiveXObject('ADODB.Stream');
StmObjT = new ActiveXObject('ADODB.Stream');
StmObjX.type = 2;
StmObjT.type = 2;
StmObjX.charset = 'utf-8';
StmObjT.charset = 'utf-8';
StmObjX.Open();
StmObjT.Open();
StmObjX.loadFromFile(FListX);
StmObjT.loadFromFile(FListT);

// 配列に格納
while (!StmObjX.EOS) {
   OldFile.push(StmObjX.ReadText('-2'));
   OldExt.push(StmObjT.ReadText('-2'));
}

// ストリームクローズ
StmObjX.Close();
StmObjT.Close();
StmObjX = '';
StmObjT = '';

MaxLoop = OldFile.length;  // マーク数保存
PPx.Execute('%K"@^END"');  // マークを外す

// ループ処理1 一旦プリフィックスを付けてリネーム
for (i=0; i < MaxLoop; i++) {
  OldName = (OldFile[i]).replace(/%/g,'%%');          // ファイル名に%が含まれている場合の対処
  if (OldExt[i] != '') {
      OldExt[i]  = (OldExt[i]).replace(/%/g,'%%');    // 拡張子に%が含まれている場合の対処
      OldName    =  OldName + '.' + OldExt[i];
  }
  NewName = ('00' + i).replace(/^.*(\d{3})$/,'$1.')    // プリフィックス 3桁連番
          + OldName;
  OldFile[i] = NewName;
  command = '*rename "'
          + iDir + OldName
          + '","'
          + iDir + NewName
          + '"';
  if (PPx.Execute(command) != 0) {  // リネームコマンド発行
      PPx.Quit(-1);                 // エラー時中断
  }
}

// 連番振り直し
for (i=0; i < MaxLoop; i++) {
  NewName = prefix
          + ('00' + i).replace(/^.*(\d{3})$/,'$1');   // 3桁連番
  if (OldExt[i] != '') {
      NewName  = NewName + '.' + OldExt[i];
  }
  command = '*rename "'
          + iDir + OldFile[i]
          + '","'
          + iDir + NewName + '"';
  if (PPx.Execute(command) != 0) {  // リネームコマンド発行
      PPx.Quit(-1);                 // エラー時中断
  }
}

//再読込
PPx.Execute('%K "@F5"');
PPx.Quit();

*[PPx]スクリプトメモ FastCopy

//!*script
// FastCopyを使った削除/複写/移動/同期ルーチン Ver 4.4
// 同一ドライブ間での移動は*ppcfileを使用する
// 引数1:fastcopyの/cmd
// 引数2:fastcopyの/force_start
// 使用エイリアス:FastCopy
// ============================================================
//^変数宣言
var arg1      = '';    // 引数:/cmd
var arg2      = '';    // 引数:/force_start
var FList     = '';    // PPxレスポンスファイル名
var iDir      = '';    // 入力元ディレクトリ
var oDir      = '';    // 出力先ディレクトリ
var title     = '';    // ウインドウタイトル
var command   = '';    // PPxコマンドワーク
var RetCD     = '';    // 戻り値
var WSHObj    = '';    //wshシェル

//スクリプト常駐指定
//PPx.StayMode = 0;    //0:常駐解除
//PPx.StayMode = 1;    //1:ファイルのみ常駐。現在は2:リソースも常駐すると同等ためコメントアウト

// 相対ディレクトリ表示のみは速攻抜け
if (PPx.EntryMarkCount == 0   ) {
    if (  (PPx.Extract('%C')  == '..')
       || (PPx.Extract('%C')  == '.')  ) {
       PPx.Quit();
    }
}

// 入力ディレクトリ確定
iDir = PPx.Extract('%FDN%\\');

//引数取得
arg1 = PPx.Arguments.Item(0);  //0オリジン
arg2 = ' ' + PPx.Arguments.Item(1);

// サブルーチン:パスが深い場合への暫定対処。
//              ファイル名のみでレスポンスファイルを作成し
//              自前でパスを付与、BOM除去出力する。
function Func_ResFConv(iDir) {
   var iLine = '';
   var FList = PPx.Extract('%a*8FCN');
   PPx.Execute('%K \"@^END\"');
   var StreamObjI = new ActiveXObject('ADODB.Stream');
   var StreamObjO = new ActiveXObject('ADODB.Stream');
   StreamObjI.Type = 2;
   StreamObjO.Type = 2;
   StreamObjI.CharSet = 'utf-8';
   StreamObjO.CharSet = 'utf-8';
   StreamObjI.Open();
   StreamObjO.Open();
   StreamObjI.LoadFromFile(FList);
   while (!StreamObjI.EOS) {
      iLine = StreamObjI.readText(-2);
      iLine = iDir + iLine;
      StreamObjO.WriteText(iLine,1);
   }
   StreamObjI.Close();
   StreamObjO.SaveToFile(FList,2);
   StreamObjO.Close();
   StreamObjI.Type = 1;
   StreamObjO.Type = 1;
   StreamObjI.Open();
   StreamObjO.Open();
   StreamObjI.LoadFromFile(FList);
   StreamObjI.Position = 3;
   StreamObjO.Write(StreamObjI.Read());
   StreamObjI.Close();
   StreamObjO.SaveToFile(FList,2);
   StreamObjO.Close();
   StreamObjI = '';
   StreamObjO = '';
   PPx.Execute('%K"@^END"');  // マークを外す
   return FList;
}

//呼出モード判定
WSHObj = new ActiveXObject('WScript.Shell');
switch (arg1.toLowerCase()){
   case 'delete':   // deleteだけ他とは別扱い
        command = '%\"削除確認\"'
        if (PPx.EntryMarkCount < 2) {
            command = command + '%Q\"' + PPx.Extract('%C') + 'を削除しますか?\"';
        } else {
            command = command + '%Q\"全' + PPx.EntryMarkCount + 'ファイルを削除しますか?\"';
        }
        RetCD = PPx.Execute(command);
        if ( RetCD != 0) {
             PPx.Quit();
        }
        FList = Func_ResFConv(iDir);
        command = PPx.Extract('%\'FastCopy\'')
                + ' /cmd=delete'
                + ' /force_close'
                + ' /error_stop'
                + arg2
                + ' /no_confirm_del'
                + ' /wipe_del=FALSE'
//                + ' /log=FALSE'
                + ' /logfile=' + WSHObj.ExpandEnvironmentStrings('\"%Temp%\\fastcopy.log\"')
                + ' /utf8'
                + ' /srcfile=\"' + FList + '\"';
        WSHObj.run(command,0,true);
        PPx.Quit();
        break;
   case 'diff':
   case 'noexist_only':
   case 'update':
   case 'force_copy':
        title = '複写先パス';
        break;
   case 'move':
        title = '移動先パス';
        break;
   case 'sync':
        title = '同期先パス';
        break;
   default:
        PPx.Echo('処理モード指定エラー。中断します。')
        PPx.Quit();
        break;
}

// 出力ディレクトリ確定
command = '%\"' + title + '\"%ed%$2%\\';
oDir    = PPx.Extract(command);
if (oDir == '') {  //ESC押下チェック
   PPx.Quit();
}

// 同一ドライブ間移動チェック
if (arg1.toLowerCase() == 'move') {
    if (    oDir.replace(/^([^\\]+|\\\\[^\\]+).*/,'$1')
        ==  iDir.replace(/^([^\\]+|\\\\[^\\]+).*/,'$1') ) {
        command = '*ppcfile !move,"'
                + oDir.replace(/%/g,'%%')
                + '",'
                + '/qstart '
                + '/nocount '
//                + '/min '
                + '/same:2 '      // 上書き
                + '/sameall:on';  // 確認なし
        PPx.Execute(command);
        PPx.Quit();
    }
}

// 入力ファイル確定
FList = Func_ResFConv(iDir);
command = PPx.Extract('%\'FastCopy\'')
        + ' /cmd=' + arg1
        + ' /force_close'                        //エラーが発生していた場合も強制的に終了
        + arg2                                   ///force_start
        + ' /estimate'                           //コピー完了時間予測
        + ' /error_stop'                         //エラー発生時にダイアログを出力
//        + ' /disk_mode=diff'                     //別HDDモード
        + ' /disk_mode=auto'                     //自動判定
//        + ' /log=FALSE'
        + ' /logfile=' + WSHObj.ExpandEnvironmentStrings('\"%Temp%\\fastcopy.log\"')
        + ' /utf8'                               //ログ出力UTF-8
        + ' /exclude=\"$Recycle.Bin\\;RECYCLER\\;System Volume Information\\;VSNAP.IDX;Thumbs.db;desktop.ini"'
        + ' /reparse'                            //ジャンクション・マウントポイント・シンボリックリンクをコピー
        + ' /acl=FALSE'                          //アクセスコントロールリストをコピーしない
        + ' /stream=FALSE'                       //副次ストリームをコピーしない
        + ' /verify'                             //MD5によるベリファイ
        + ' /skip_empty_dir=FALSE'               //空ディレクトリもコピーする
        + ' /srcfile=\"' + FList + '\"'
        + ' /to=\"' + oDir +'\"';
WSHObj.run(command,0,false);  //0:ウィンドウ非表示 false:終了待機しない

// 後処理
WSHObj = '';
PPx.Quit();