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

原文链接

需求

现有以下图片文件

修改前

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

修改后

最简单的人力操作就是逐个文件重命名,但本着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');

开发

开发思路:

读取源目录

判读存放目录是否存在,不存在时新建目录

复制文件

判断复制内容是否为文件

创建读取流

创建写入流

链接管道,写入文件内容

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

node重命名文件名_node文件批量重命名相关推荐

  1. java 批量重命名_Java实现文件批量重命名

    Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应 ...

  2. c语言批量重命图片,图片文件批量重命名的3种方法

    1. 简单重命名,资源管理器 如下,是从数码相机里倒进来的照片,名称是相机自己命名的. 这些照片全是宝贝4岁4月的,我想命名为0404XXX,XXXX为顺序号. 选中所有需要重命名的文件,在第一个(切 ...

  3. python如何对文件进行批量命名-利用Python对文件批量重命名

    由于要用到对无序的文件进行重命名,以下写了一个脚本,进行批量进行重命名. 基本格式是 i.后缀名 (i 循环条件下的数 ) 1 #coding:utf8 2 import os; 3 4 def re ...

  4. 深蓝文件批量重命名工具绿色中文便携版V4.0 | 电脑批量重命名软件下载 | 批量重命名软件哪个好

    深蓝文件批量重命名工具顾名思义是一款短小精悍且功能实用又丰富的免费电脑批量重命名软件,支持常规.替换.文件大小写转换.mp3标签添加等诸多功能,具备三种重命名方式,可全面兼容文件名.扩展名以及全部的文 ...

  5. 文件批量重命名教程-批量重命名软件推荐

    小伙伴们注意:公众号的推送机制不再按照时间前后推送了,微信公众号信息流乱序.君哥建议大家把科技毒瘤君公众号置顶(设为星标⭐),以便第一时间看到推送,非常感谢~,方法如下图: 上次发了一个BAYC猿壁纸 ...

  6. 文件批量重命名工具,批量修改文件名的实现思路

    在工作中可能会遇到文件数据成果已经制作完成后,遇到文件命名规则变更,需要对大量文件重命名,甚至修改目录结构的.本文介绍利用FME实现文件批量重命名的解决方法. 因为工作实际情况各不相同,文件重命名规则 ...

  7. Hitv8 文件批量重命名工具

        本工具用于单文件或批量文件文件名.文件类型扩展名重命名的小工具,欢迎使用! 使用说明: 1.使用拖放方式,将文件拖入列表框即可 2.可以不输文件名,表示文件名不变,只改类型: 类型也可以自已输 ...

  8. 教你文件批量重命名技巧,彻底告别手工改名的繁琐

    说起文件重命名,肯定还有在手动一个一个重命名的.别急,今天给大家推荐帮助你批量重命名,一键更改文件名称,摆脱繁杂枯燥的操作,简单实用,一起来看操作步骤. 准备工具在电脑上安装一个[文件批量改名高手]支 ...

  9. 给电脑文件批量重命名和更改后缀名

    给电脑文件批量重命名和更改后缀名 1. 概述 2. 第一种方式(F2+Enter) 3. 第二种方式(Everthing) 4. 用 Everthing 批量更改文件后缀名 4.1 更改"新 ...

  10. 文件批量重命名001开始的办法

    如何将文件批量重命名001开始?有些小伙伴在给大量文件重命名的时候,希望将文件名改成依次递增的数字序号,例如将文件名改成001.002.003.004.005.......那么你知道如何操作吗?相信大 ...

最新文章

  1. struts2.1.6教程七、国际化
  2. EditPlus正则表达式
  3. 虚拟化部署之Hyper-V虚拟网络配置
  4. LeetCode 1921. 消灭怪物的最大数量(排序)
  5. Win7 不能安装SQL Server 2005 Management Studio Express.msi解决办法
  6. 如何使用OSQP-Eigen
  7. ef 在此上下文中只支持基本类型或枚举类型_Java枚举不应该成为你成功路上得绊脚石,源码给你讲解清楚
  8. Selenium-IDE脚本录制,selenium-side-runner自动化测试教程
  9. java怎样学_告诉你java如何学
  10. ssm-学子商城-项目第十一天
  11. github清华大学计算机系课程攻略,GitHub 项目推荐|清华大学计算机系课程相关资源集合|内容丰富...
  12. 想要艺术气质高逼格,不吹牛真的有捷径可走
  13. Python证件照背景自定义改色,带Tkinter界面,代码全文解释!
  14. Entity Framework Code First 学习日记(4)
  15. Redmi 游戏电视 X Pro 评测
  16. 智能垃圾桶语音芯片应用设计方案介绍,WT588F02B-8S
  17. 2022年安装Windows7 x64 专业版系统更新提示错误代码80072EFE,解决办法【亲测有限】
  18. Linux下mysql数据库从服务器A只迁移DATA文件夹到服务器B
  19. 【python】获取当前时间(年月日时分秒)
  20. 服务器运行温度30,服务器工作环境温度为度~度之间,最好度。

热门文章

  1. 解决Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:
  2. web开发必备的几个软件
  3. java数组清空能释放jvm内存嘛_JVM面试题汇总
  4. NYOJ 972 核桃的数量(蓝桥杯)
  5. mysql只导出表数据_MySQL 如何只导出 指定的表 的表结构和数据 ( 转 )
  6. springboot开启缓存_springBoot与缓存使用
  7. php mysql数据库同步_教你怎样在两台MySQL数据库间实现同步
  8. linux 字符驱动 tty,打通linux的tty驱动的数据链路
  9. python中的super用法详解_python中super的用法实例解析
  10. python遗传算法最短路径问题有几种类型_用遗传算法求解最短路径问题.pdf