当前位置: 首页 > 后端技术 > Node.js

节点文件批量重命名

时间:2023-04-03 21:17:30 Node.js

实际需求中,需要对一批文件(如文本、图片)进行重命名,并按编号编号。正好借此机会熟悉一下node的fs文件操作,写了一个批量修改文件名的脚本。原文链接要求以下图片文件需要批量修改,将文件名改为统一前缀名和自增索引。修改后最简单的手动操作就是一个一个重命名文件,但是本着DRY(Don'trepeatyourself)原则,或者写一个node脚本来搞定。学习node中的文件操作,需要了解fs模块。在fs模块中,读取文件有两种方式:同步方式和异步方式。//异步fs.readFile('test.txt','utf-8'(err,data)=>{if(err){throwerr;}console.log(data);});//同步让数据=fs.readFileSync('test.txt');控制台日志(数据);异步读取文件参数:文件路径、编码方式、写入文件的回调函数fs.writeFile('test2.txt','thisistext',{'flag':'w'},err=>{if(err){throwerr;}console.log('saved');});写入文件参数:目标文件、写入内容、写入形式、回调函数标志写入方法:r:读取文件w:写入文件a:追加创建目录fs.mkdir('dir',(err)=>{if(err){throwerr;}console.log('makedirsuccess');});dir读取新目录名称的目录fs.readdir('dir',(err,files)=>{if(err){throwerr;}console.log(files);});dir为读取目录名,files为目录中的文件或目录名数组获取文件信息fs.stat('test.txt',(err,stats)=>{console.log(stats.isFile());//true})获取文件信息后的stats方法:方法说明stats.isFile()is文件stats.isDirectory()是否为目录stats.isBlockDevice()是否为块设备stats.isCharacterDevice()是否为字符设备stats.isSymbolicLink()是否为软链接stats.isFIFO()是否为UNIXFIFO命令管理stats.isSocket()是否为Socket创建读流letstream=fs.createReadStream('test.txt');创建写入流letstream=fs.createWriteStreamr('test_copy.txt');开发开发思路:读取获取源码目录判断存放目录是否存在。如果不存在,则新建目录,复制文件,判断复制的内容是否为文件。创建读流创建写流链接管道写入文件内容letfs=require('fs'),src='src',dist='dist',args=process.argv.slice(2),filename='image',index=0;//showhelpif(args.length===0||args[0].match('--help')){console.log('--help\n\t-src文件源\n\t-dist文件目标\n\t-n文件名\n\t-i文件名索引\n');returnfalse;}args.forEach((item,i)=>{if(item.match('-src')){src=args[i+1];}elseif(item.match('-dist')){dist=args[i+1];}elseif(item.match('-n')){filename=args[i+1];}elseif(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,距离,文件名,索引);}else{fs.mkdir(dist,()=>{copyFile(文件,src,dist,文件名,索引);})}});}});functioncopyFile(files,src,dist,filename,index){files.forEach(n=>{letreadStream,writeStream,arr=n.split('.'),oldPath=src+'/'+n,newPath=dist+'/'+文件名+索引+'.'+arr[arr.length-1];fs.stat(oldPath,(err,stats)=>{if(err){console.log(err);}elseif(stats.isFile()){readStream=fs.createReadStream(oldPath);writeStream=fs.createWriteStream(newPath);readStream.pipe(writeStream);}});index++;功能开发,这样javascript不局限于浏览器,尝试自己写一些脚本,有助于理解这些模块,同时提高办公效率