node文件批量重命名的方法示例


Posted in Javascript onOctober 23, 2017

在一个实际需求中,需要对一批文件(如:文本、图片)进行重命名,按照数字编号。正好借此熟悉了一下node的fs文件操作,写了一个批量修改文件名的脚本。

需求

现有以下图片文件

node文件批量重命名的方法示例

需要批量修改文件名称,变为统一前缀名称并且自增索引,修改后效果

node文件批量重命名的方法示例

最简单的人力操作就是逐个文件重命名,但本着DRY(Don't repeat yourself)原则,还是写一个node脚本搞定。

研究

node中要进行文件操作需要了解一下fs模块

在fs模块中有同步和异步两种方式

读取文件

//异步
fs.readFile('test.txt', 'utf-8' (err, data) => {
  if (err) {
    throw err;
  }
  console.log(data);
});

//同步
let data = fs.readFileSync('test.txt');
console.log(data);

异步读取文件参数:文件路径,编码方式,回调函数

写入文件

fs.writeFile('test2.txt', 'this is text', { 'flag': 'w' }, err => {
  if (err) {
    throw err;
  }
  console.log('saved');
});

写入文件参数:目标文件,写入内容,写入形式,回调函数

flag写入方式:

r:读取文件
w:写文件
a:追加

创建目录

fs.mkdir('dir', (err) => {
  if (err) {
    throw err;
  }
  console.log('make dir success');
});

dir为新建目录名称

读取目录

fs.readdir('dir',(err, files) => {
  if (err) {
    throw err;
  }
  console.log(files);
});

dir为读取目录名称,files为目录下的文件或目录名称数组

获取文件信息

fs.stat('test.txt', (err, stats)=> {
  console.log(stats.isFile());     //true
})

获取文件信息后stats方法:

方法 说明
stats.isFile() 是否为文件
stats.isDirectory() 是否为目录
stats.isBlockDevice() 是否为块设备
stats.isCharacterDevice() 是否为字符设备
stats.isSymbolicLink() 是否为软链接
stats.isFIFO() 是否为UNIX FIFO命令管道
stats.isSocket() 是否为Socket

创建读取流

let stream = fs.createReadStream('test.txt');

创建写入流

let stream = fs.createWriteStreamr('test_copy.txt');

开发

开发思路:

  1. 读取源目录
  2. 判读存放目录是否存在,不存在时新建目录
  3. 复制文件
  4. 判断复制内容是否为文件
  5. 创建读取流
  6. 创建写入流
  7. 链接管道,写入文件内容
let fs = require('fs'),
  src = 'src',
  dist = 'dist',
  args = process.argv.slice(2),
  filename = 'image',
  index = 0;

//show help
if (args.length === 0 || args[0].match('--help')) {
  console.log('--help\n \t-src 文件源\n \t-dist 文件目标\n \t-n 文件名\n \t-i 文件名索引\n');
  return false;
}

args.forEach((item, i) => {
  if (item.match('-src')) {
    src = args[i + 1];
  } else if (item.match('-dist')) {
    dist = args[i + 1];
  } else if (item.match('-n')) {
    filename = args[i + 1];
  } else if (item.match('-i')) {
    index = args[i + 1];
  }
});

fs.readdir(src, (err, files) => {
  if (err) {
    console.log(err);
  } else {
    fs.exists(dist, exist => {
      if (exist) {
        copyFile(files, src, dist, filename, index);
      } else {
        fs.mkdir(dist, () => {
          copyFile(files, src, dist, filename, index);
        })
      }
    });
  }
});

function copyFile(files, src, dist, filename, index) {
  files.forEach(n => {
    let readStream,
      writeStream,
      arr = n.split('.'),
      oldPath = src + '/' + n,
      newPath = dist + '/' + filename + index + '.' + arr[arr.length - 1];
    fs.stat(oldPath, (err, stats) => {
      if (err) {
        console.log(err);
      } else if (stats.isFile()) {
        readStream = fs.createReadStream(oldPath);
        writeStream = fs.createWriteStream(newPath);
        readStream.pipe(writeStream);
      }
    });
    index++;
  })
}

效果

node文件批量重命名的方法示例

总结

node提供了很多模块可以帮助我们完成不同需求的功能开发,使javascript不仅仅局限与浏览器中,尝试自己编写一些脚本有助于对这些模块的理解,同时也能提高办公效率。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS应用之禁止抓屏、复制、打印
Feb 21 Javascript
jquery中选择块并改变属性值的方法
Jul 31 Javascript
javascript + jquery实现定时修改文章标题
Mar 19 Javascript
学习JavaScript设计模式(链式调用)
Nov 26 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
Jul 04 Javascript
Node.js常用工具之util模块
Mar 09 Javascript
jQuery实现的淡入淡出与滑入滑出效果示例
Apr 18 jQuery
layer.confirm点击第一个按钮关闭弹出框的方法
Sep 09 Javascript
vue-property-decorator用法详解
Dec 12 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 Javascript
vue路由传参的基本实现方式小结【三种方式】
Feb 05 Javascript
js实现聊天对话框
Feb 08 Javascript
详解vue 实例方法和数据
Oct 23 #Javascript
深入浅析javascript继承体系
Oct 23 #Javascript
Vue.js组件通信的几种姿势
Oct 23 #Javascript
Vue2.0+ElementUI实现表格翻页的实例
Oct 23 #Javascript
JavaScript之创意时钟项目(实例讲解)
Oct 23 #Javascript
浅谈js的解析顺序 作用域 严格模式
Oct 23 #Javascript
基于Vue2.0+ElementUI实现表格翻页功能
Oct 23 #Javascript
You might like
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
2016/05/09 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
jQuery中的常用事件总结
2009/12/27 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
Node.JS文件系统解析实例详解
2017/05/15 Javascript
PHP 实现一种多文件上传的方法
2017/09/20 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
python 编写简单网页服务器的实例
2018/06/01 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
2020/02/29 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
Python创建自己的加密货币的示例
2021/03/01 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
个性大学生自我评价
2013/12/04 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
环保宣传语大全
2015/07/13 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技