源**(file-rename.js)
// 檔案路徑:file-rename.js
/** * nodejs 批量重新命名檔案,並儲存到指定目錄,支援遞迴目錄
* 功能:批量重新命名檔案,並儲存到指定目錄,支援遞迴目錄
* 使用:node file-rename.js
* 擴充套件包:無
*/// 引用 fs 檔案系統模組
const nmfs = require('fs');
// 引用 path 路徑處理模組
const nmpath = require('path');
// 配置資訊
const config = ,
// 前面刪除模式
trim_start: 個字元
length: 10,
length_key: 'no.',
},// 後面刪除模式
trim_end: 個字元
length: 0
},// 後面追加模式
enable: false,
},// 前面追加件模式
prepend: ,
// 中間替換或插入模式
splice: ,
// 允許處理的副檔名
allow_exts: ,
// 跳過處理的副檔名
skip_exts:
}/**
* 更改檔名
* @param basename 檔名,無副檔名
* @param ext 副檔名
*/function changename(basename = '', ext = '', isdirmode = false)
if (config.skip_exts.enable && config.skip_exts.exts.includes(ext))
}let namelength = basename.length;
// 檔名前面移除字元
if (config.trim_start.enable)
// 字元長度刪除模式
if (config.trim_start.length > 0 && (namelength > config.trim_start.length)) }}
// 檔名後面移除字元
if (config.trim_end.enable)
// 字元長度刪除模式
if (config.trim_end.length > 0 && namelength > config.trim_end.length)
}// 過濾字串模式
if (config.filter_text.enable && config.filter_text.text.length > 0)
// 中間替換或插入模式
if (config.splice.enable)
// 檔名前面插入字元
if (config.prepend.enable)
// 檔名後面插入字元
}return basename;
}/**
* 批量更改檔名到指定目錄
* @param fromdir **目錄
* @param todir 目標目錄
* @param isdebug 是否除錯模式。除錯模式不會執行重新命名操作,只會輸出控制台日誌
* @param isskipexists 是否跳過已存在的目標檔案
* @param isdirmode 是否重新命名物件為目錄,否則為檔案
* @param isrecursion 是否遞迴遍歷子目錄
*/async function renamefiles(fromdir, todir, isdebug = true, isskipexists = true, isdirmode = false, isrecursion = true)
// 自動建立目標路徑
if (!isdebug && !nmfs.existssync(todir)) );
}let sep = nmpath.sep;
// 自動補齊路徑符
if (!fromdir.endswith(sep))
if (!todir.endswith(sep))
// 開啟目錄
const dir = await nmfs.promises.opendir(fromdir);
// 宣告變數,優化記憶體
let basename = '',
ext = '',
newpath = '',
currentpath = '';
for await (const dirent of dir)
if (!isdebug)
console.log('[重新命名]', currentpath, '=>', newpath);
}if (isrecursion)
continue;
}if (isdirmode)
// 檔名
basename = nmpath.basename(dirent.name, ext); // 無副檔名
ext = ext.substring(1).tolowercase();
basename = changename(basename, ext);
newpath = todir + basename + '.' + ext;
// 判斷是否過濾已存在的目標檔案
if (isskipexists && nmfs.existssync(newpath))
if (!isdebug)
console.log('[重新命名]', currentpath, '=>', newpath);
}}// 執行批量檔案重新命名功能
const from_dir = 'f:\\downloads\\images';
const to_dir = from_dir;
const is_debug = false;
const is_skip_exists = true;
const is_dir_mode = true;
const is_recursion = false;
renamefiles(from_dir, to_dir, is_debug, is_skip_exists, is_dir_mode, is_recursion).catch(err => console.log(err))
執行檔案
node file-rename.js
批量重新命名檔案
windows xp下 比如 ren jpe jpg linux下 在多數系統中,rename是乙個perl指令碼,rename的使用也支援perl的正規表示式。rename的基本語法是 rename perl表示式 檔名perl表示式用於修改檔名,如s開頭的串表示替換。舉幾個比較實用的例子 刪除所...
批量重新命名 檔案批量重新命名和同名檔案複製
近期在給一家影樓做資料維護的時候,碰到乙個令他們糾結的問題。原因是這樣的,很多影樓現在要求數碼人員用原片修,而不能用磨過皮的 精修,因為磨過皮的 再修的話,會影響 的層次感。數量少的時候,數碼部手工操作還方面,根具分片後的 然後到原始片裡把 一張一張的選出來,再製作。但旺季忙的時候,有些數碼師就偷懶...
檔案批量重新命名
今天遇到乙個問題,有一批檔案,需要修改字尾名,還要將前面的部分字元刪除,首先想到重新命名命令 ren 試了幾次,無法實現需求,只能,批處理了。在網上查了一下,寫了個,將字尾為.doc.doc的該為只有乙個.doc echo off setlocal enabledelayedexpansion 開啟...