node递归批量重命名指定文件夹下的文件

时间:2020-12-29 09:56:58

1、用法:将js内容拷到一文件中,命名为batchRename.js;

      该文件可以放到任何你想更改文件名的文件夹目录,然后dos(或 linux 终端)进入该文件夹,然后执行node batchRename.js;

      然后它就会把该文件夹下的所有文件名前面加上它所在的文件夹名和一个"-"。

      它的执行是递归的,会影响下面的所有子目录。

2、重命名文件的规则可以通过修改里面带注释那个if里的逻辑进行自定义。

 

 1 var path = require("path");
2 var fs = require("fs");
3 var rootPath = __filename;
4 renameFilesInDir(path.dirname(rootPath));
5
6 function changeFileName(filepath){
7 fs.stat(filepath,function(err,stats){
8 if(stats.isFile()){
9 //console.log("isFile,chaning filename...");
10 var filename = path.basename(filepath);
11 var parentDir =path.dirname(filepath);
12 var parentDirname = path.basename(path.dirname(filepath));
13 var thisFilename = path.basename(__filename);
14 //console.log(thisFilename);
15 //这个if就是进行更改文件名的逻辑,可以自行定义,这里定义为将文件命名为当前文件夹的名字加"-文件自身名"
16 if(filename!=thisFilename&&filename.indexOf(parentDirname)<0){
17 var newName = parentDirname+"-"+filename;
18 var newPath =parentDir+"\\"+newName;
19 console.log("going to rename from "+filepath+" to "+newPath);
20 fs.rename(filepath,newPath);
21 }
22 }else if(stats.isDirectory()){
23 console.log("============["+filepath+"] isDir===========");
24 renameFilesInDir(filepath);
25 }else{
26 console.log("unknow type of file");
27 }
28 });
29 }
30
31 function renameFilesInDir(dir){
32 fs.readdir(dir,function(error,files){
33 var len = files.length;
34 var file = null;
35 for(var i=0;i<len;i++){
36 file = files[i];
37 changeFileName(dir+"\\"+file);
38 }
39 });
40 }