批量处理文件研究(前端小伙子花式踩坑经历)

一、需求

现在需求是这样的:你现在要维护100多个同类型站点,每个站点大约有30多个模板文件,虽然目录和文件命名大体一致,但是由于网站系统升级,导致部分文件名变更,文件位置变更,于是现在要统一所有站点文件命名,对于这么大量的修改,第一时间想到的是批量处理文件。

二、实施

想了几个方案:

  • 1、window自带的批量修改文件/文件夹
  • 2、网上下载批处理软件
  • 3、写bat批处理代码
  • 4、写javaScript批处理代码
  • 5、写nodeJs批处理代码

2.1 window自带的批量修改文件/文件夹

方案1:失败。虽然简单方便明了,但实际却得到失败的结果,可以批量重命名,但是居然重命名后自带了(1).cshtml,例如“公开信件内容页.cshtml”重命名为“公开咨询内容页.cshtml”;执行批量修改后居然都变成了“公开咨询内容页(1).cshtml”,相当蛋疼。而且不能批量移动文件、批量复制文件,放弃。

2.2 网上下载批处理软件

方案2:放弃。下载了2个软件,均不能满足需求。要么不能搜索文件名称、要么不能搜索子目录下的文件、要么不能搜索共享目录文件,而且下载软件还有中毒风险,放弃。

2.3 写bat批处理代码

方案3:放弃。bat批处理其实是最合适的做法,但网上搜了些代码,看到那些非常反人类的语法后放弃了。

2.4 写javaScript批处理代码

方案4:呕血。一开始我是用javaScript写的批处理代码,由于ie的fso是可以操作文件的,所以一开始比较顺利,已经做到把所需要批处理的文件搜出来了,但是居然不能重命名文件,可以增加、删除、移动、复制,就是不能重命名,呕血。

使用ie下的fso读取所需文件:
在这里插入图片描述

2.5 写nodeJs批处理代码

方案5:成功。无奈之下只能用nodeJs了,结果成功了,而且速度比ie的fso快1倍。

批量修改文件名:
在这里插入图片描述
nodejs代码:

功能:读取指定路径文件夹下的所有文件(含子文件夹)并重命名

var fs = require("fs")
var path = require("path")

var root = path.join("\\\\c:\\文件\\");
var oldName = "旧文件名.cshtml";
var newName = "新文件名.cshtml";

//读取root路径文件夹下的所有文件并重命名
readDirSync(root)
function readDirSync(path){
    var pa = fs.readdirSync(path);
    pa.forEach(function(ele,index){
        var info = fs.statSync(path+"/"+ele)
        if(info.isDirectory()){
            readDirSync(path+"/"+ele);
        }else{
            if(ele == oldName){
                var oldFile = path+"/"+ele;
                reName( oldFile, path+"/"+newName );
            }
        }
    })
}

//重命名
function reName( oldPath,newPath  ){
    fs.rename( oldPath, newPath, function (err) {
      if(err) {
        console.error(err);
        return;
      }
      console.log(oldPath +"  重命名为\n" + newPath)
    });
}

三、总结

本例只演示了nodejs批量重命名方法,当然还有 增加、删除、移动、复制 等所有文件操作,有需要我会总结出来。

发布了43 篇原创文章 · 获赞 2 · 访问量 4587

猜你喜欢

转载自blog.csdn.net/iamlujingtao/article/details/102588878