NodeJs 批量重新命名檔案,並儲存到指定目錄

2022-06-24 00:57:11 字數 3355 閱讀 4351

源**(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 開啟...