我想知道是否可以使用node.js脚本重命名一部分文件名。我正在使用带有fs的node.js。但是我只能重命名整个内容。
1 const fs = require('fs');
2 fs.readFile('./test.json', function(error, data) {
3 if (error) {
4 console.log(error);
5 return;
6 }
7
8 var obj = JSON.parse(data);
9 for(var p in obj) {
10 fs.rename('./' + obj[p] + '.jpg', './' + p + '.jpg', function(err) {
11 if ( err ) console.log('ERROR: ' + err);
12 });
13 }
14 });
〜
这是我的json文件
1 {
2 "DEC19" : "2019-12-08",
3 "MAY19" : "2019-05-26"
4 }
此json文件仅包含我要更改的部分名称。
希望您能帮助我,谢谢(:
答案 0 :(得分:0)
如果它是一个json文件,您是否可以通过要求不读取该文件,并且由于它将被作为对象读取,因此可以在之后对其进行重命名。如果是for循环脚本,也请考虑在for循环中使用同步版本。
类似
const obj = require("./test.json");
for(var p in obj) {
fs.renameSync('./' + obj[p] + '.jpg', './' + p + '.jpg');
}
答案 1 :(得分:0)
我认为您无法在文件的回调中读取文件时重命名该文件。您可能需要使用readFileSync
:
const fs = require('fs'),
path = require('path');
let data = fs.readFileSync('./test.json');
let obj = JSON.parse(data);
let dir = 'scripts/';
for (var p in obj) {
let search = RegExp(obj[p], 'g');
let files = fs.readdirSync(dir);
files.filter((file) => file.match(search))
.forEach( (file) => {
let filePath = path.join(dir, file)
let newFile = path.join(dir, file.replace(search, p));
fs.renameSync(filePath, newFile);
});
}