批量更新,txt文件名包含第三行内容(其中第三行)

时间:2019-07-16 13:58:20

标签: javascript node.js regex batch-rename

我设法形成一个正则表达式来搜索在.txt文件中找到的日期格式,并使用在其中找到的每个日期批量更新.txt文件的每个名称。但是,新的要求是在出现日期之前获取会员ID和会员名称。


我不愿意为此使用正则表达式,因为格式似乎不够独特。我正在考虑抓取文本文件“第3行”上的所有内容,并在名称前加上姓名(在日期之前)。


例如,.txt文件的前三行如下所示:

MEMBER    
-------- ---------------
9999199  RON, CAPTAIN // this is line 3

即所需的新文件名/输出: 9999199_RON,CAPTAIN_2015-07-09.txt

以下是我到目前为止通过目录中的文本文件进行批处理并以日期作为名称的内容。 ( ie 当前重命名为2015-07-09.txt)..只需获取会员编号和上面的名称(包括逗号),然后附加到新名称-或放置为新名称日期方面之前的文件名。


const fs = require('fs')
const path = require('path')

let dir = './'

fs.readdir(dir, {
  encoding: 'utf8',
  withFileTypes: true
}, (err, files) => {
  if (err) {
    // Error happened when reading the directory
    console.error(err)
    return
  }
  for (const file of files) {
    if (!file.isFile()) {
      // Directory or block device?
      continue;
    }

    // Read file contents
    let fileContents = fs.readFileSync(path.join(dir, file.name), 'utf8')
    let dateMatches = fileContents.match(/[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])/)
    if (dateMatches) {
      // There is a date here
      fs.rename(path.join(dir, file.name), path.join(dir, dateMatches[0]), (err) => {
        if (err) {
          console.error(err)
          // Do your error handling stuff here...

          return
        } else {
          console.log('Renamed', file.name, 'to', dateMatches[0])
        }
      })
    }
  }
})

1 个答案:

答案 0 :(得分:1)

尝试使用定界符fileContents拆分\n,并将其限制为3个块。

let [,,line3] = fileContents.split('\n', 3); 

if(line3) {
    // do the work
} else {
    // error handling, where file is too short, less than 3 lines.
}

然后您可以在replace()上进一步进行split()join() / line3