为了账号安全,请及时绑定邮箱和手机立即绑定

node fs重命名问题

node fs重命名问题

慕尼黑8549860 2018-08-03 09:06:35
需求 : 对一个文件夹中的所有jpg文件重命名为 1.jpg 、2.jpg、3.jpg、...依次类推;问题1:使用node的fs模块代码如下:var fs = require('fs');var counter = 1;var re = /(.*)+\.(jpg|bmp|gif|png)$/i; fs.readdir('./', function(err, files) {    if (err) {        console.log("失败了");     } else {        for (var index = 0; index < files.length; index++) {            var element = files[index];            if (re.test(element)) {                 fs.rename(element,counter + '.jpg', function(err, fil) {                    if (err) {                        console.log(counter + '命名失败');                     } else {                        // console.log(files);                         console.log(counter + '命名成功');                         counter++;                     }                 })             }         }     } })运行前:运行后:请问: 为什么会只剩下1.jpg? 问题出在哪里?问题2: 你知道的几种方法可以做到这样的重命名? shell 、 正则replace、python等等皆可, 望给出代码实例;
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

fs.rename 是异步的,所以就没法保证counter的值是按顺序累加的,推荐以下写法(在Windows上测试过).

fs.readdir('./', function(err, files) {    if (err) {        console.log("失败了");        return;  //如果出错直接返回,就不用else了
    }
    files.forEach(function(fn){ //这样更简便
        if(!re.test(fn)) return;        console.log(">>> "+ fn);
        fs.renameSync(fn,counter + '.jpg' ); //同步重命名
        counter++;
    });   
});


查看完整回答
1 反对 回复 2018-09-25
  • 1 回答
  • 0 关注
  • 687 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号