使用node.js脚本重命名文件名的一部分

时间:2019-12-24 13:38:33

标签: node.js rename

我想知道是否可以使用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文件仅包含我要更改的部分名称。

希望您能帮助我,谢谢(:

2 个答案:

答案 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);
  });
}
相关问题