もともとは私家版の「エディタを使って一括リネーム」から
連番リネーム部分を切り出したサブセットだったのだが・・・。
テスト中に拡張子判定を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();