使っているうちにいろいろと手を入れ続けていて
以前とはだいぶかわってしまった。
最初に入力する初期値から連番の桁数を決定するので
・1入力 1,2,3…10,11,12…99,100,101…
・01入力 01,02,03…10,11,12…99,100,101…
・001入力 001,002,003…010,011,012…099,100,101…
となる。
//!*script // 連番リネーム Ver4.1 // ============================================================ //^変数宣言 var OldFile = []; // リネーム前ファイル名格納配列 var OldExt = []; // リネーム前ファイル拡張子格納配列 var i = 0; // 配列インデックス var iDir = ''; // 入力ファイルディレクトリ var OldName = ''; // リネーム前ファイル名ワーク var NewName = ''; // リネーム後ファイル名ワーク var FListX = ''; // PPxレスポンスファイル名(ファイル名) var FListT = ''; // PPxレスポンスファイル名(拡張子) var MaxLoop = ''; // PPxマークエントリ数 var LoopDgit = 0; // PPxマークエントリ数桁数 var command = ''; // PPxコマンドワーク var StmObjX = ''; // ストリームオブジェクト(ファイル名) var StmObjT = ''; // ストリームオブジェクト(拡張子) var DummyPre = ''; // 接頭辞ワーク var RegObj = ''; // 正規表現オブジェクト var NumOrgn = ''; // 連番開始位置 var NumDgit = 0; // 連番桁数 // 確認メッセージ command = '%"' + (PPx.ScriptName).replace(/^.+\\(.+$)/,'$1') + '"' + '%:%QN"全ファイルを連番リネームしますか?"'; if (PPx.Execute(command) != 0) { PPx.Quit(); } //開始位置/桁数問い合わせ ※デフォルトは'000' NumOrgn = PPx.Extract('%"開始位置/桁数"%{000%}'); if (NumOrgn == '') { //ESC押下チェック PPx.Quit(); } //数値チェック ※エラー時中断 if (NumOrgn.match(/[^0-9]+/)) { command = '%"' + (PPx.ScriptName).replace(/^.+\\(.+$)/,'$1') + '"' + '%:%I"数値以外が入力されました"'; PPx.Execute(command); PPx.Quit(-1); } //開始位置を数値変換 NumDgit = NumOrgn.length; NumOrgn = Number(NumOrgn); // 入力ディレクトリ確定 iDir = PPx.Extract('%FDN%\\'); iDir = iDir.replace(/%/g,'%%'); // ディレクトリ名に%が含まれている場合の対処 if (PPx.EntryMarkCount == 0) { // マーク数チェック PPx.Execute('%K"@HOME"'); // ファイルのみマーク // PPx.Execute('%K"@END"'); // 全エントリマーク }; // レスポンスファイル作成 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 = ''; PPx.Execute('*delete "' + FListX + '"'); PPx.Execute('*delete "' + FListT + '"'); MaxLoop = OldFile.length; // マーク数保存 LooDgit = String(MaxLoop).length; // マーク数桁数 ※型変換が必要 PPx.Execute('%K"@^END"'); // マークを外す //ダミーPrefix生成 ※PadLeftが使えない DummyPre = ''; for (i=0; i < LooDgit; i++) { DummyPre = DummyPre + '0'; // 桁数分0を連結 } //正規表現オブジェクト生成 ※マーク数桁数 RegObj = new RegExp('^.*(\\d{' + LooDgit + '}$)'); //\dは\\d // ループ処理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 = (DummyPre + i).replace(RegObj,'$1.') + OldName; OldFile[i] = NewName; command = '*rename "' + iDir + OldName + '","' + iDir + NewName + '"'; if (PPx.Execute(command) != 0) { // リネームコマンド発行 PPx.Quit(-1); // エラー時中断 } } //ダミーPrefix生成 ※PadLeftが使えない DummyPre = ''; for (i=0; i < NumDgit; i++) { DummyPre = DummyPre + '0'; // 桁数分0を連結 } //正規表現オブジェクト生成 ※指定桁数 RegObj = new RegExp('^.*(\\d{' + NumDgit + '}$)'); //\dは\\d // 連番振り直し for (i=0; i < MaxLoop; i++) { if ( (String(NumOrgn + i)).length < NumDgit ) { NewName = (DummyPre + (NumOrgn + i) ).replace(RegObj,'$1'); } else { NewName = NumOrgn + i; } 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();