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++;

}

})

}

}

}

})

运行前:图片描述
运行后:图片描述
请问: 为什么会只剩下1.jpg? 问题出在哪里?

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

回答:

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++;

});

});

回答:

没有运行过代码,不过应该是counter++的问题,首先尝试将counter++放到fs.rename后面,应该可以通过。推测原因是fs.rename是异步代码,所以并不会等待fs.rename执行完成后执行counter++

以上是 node fs重命名问题 的全部内容, 来源链接: utcz.com/a/160884.html

回到顶部