使っているうちにいろいろと手を入れ続けていて
以前とはだいぶかわってしまった。
最初に入力する初期値から連番の桁数を決定するので
・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();