猿问

node fs重命名问题

需求 : 对一个文件夹中的所有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++;
                    }
                })
            }

        }
    }
})

运行前:

运行后:

https://img3.mukewang.com/5ba99950000166a713600757.jpg

请问: 为什么会只剩下1.jpg? 问题出在哪里?

问题2: 你知道的几种方法可以做到这样的重命名? shell 、 正则replace、python等等皆可, 望给出代码实例;


慕尼黑8549860
浏览 707回答 1
1回答

狐的传说

fs.rename&nbsp;是异步的,所以就没法保证counter的值是按顺序累加的,推荐以下写法(在Windows上测试过).fs.readdir('./',&nbsp;function(err,&nbsp;files)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(err)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("失败了");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;//如果出错直接返回,就不用else了 &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;files.forEach(function(fn){&nbsp;//这样更简便 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!re.test(fn))&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(">>>&nbsp;"+&nbsp;fn); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.renameSync(fn,counter&nbsp;+&nbsp;'.jpg'&nbsp;);&nbsp;//同步重命名 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counter++; &nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp; });
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答