批量更新,txt文件名加上第三行内容(3rd line within)

batch update ,txt file names with the third line content (3rd line within)

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


我不太愿意为此使用正则表达式,因为格式似乎不够独特。我 想抓取文本文件 'line 3' 上的所有内容,并在名称前添加(在日期之前)。


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

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

即所需的新文件 name/output: 9999199_RON,CAPTAIN_2015-07-09.txt

以下是我迄今为止对目录中的文本文件进行批处理并获取日期作为名称的内容。 ( 目前重命名为 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])
        }
      })
    }
  }
})

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

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

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

然后您可以在 line3

上进一步 replace()split() / join()