需求 : 对一个文件夹中的所有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++; }); });
添加回答
举报
0/150
提交
取消