真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

node文件批量重命名的方法示例

在一個實際需求中,需要對一批文件(如:文本、圖片)進(jìn)行重命名,按照數(shù)字編號。正好借此熟悉了一下node的fs文件操作,寫了一個批量修改文件名的腳本。

成都創(chuàng)新互聯(lián)致力于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,成都網(wǎng)站設(shè)計,集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇成都創(chuàng)新互聯(lián),就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!

需求

現(xiàn)有以下圖片文件

node文件批量重命名的方法示例

需要批量修改文件名稱,變?yōu)榻y(tǒng)一前綴名稱并且自增索引,修改后效果

node文件批量重命名的方法示例

最簡單的人力操作就是逐個文件重命名,但本著DRY(Don't repeat yourself)原則,還是寫一個node腳本搞定。

研究

node中要進(jìn)行文件操作需要了解一下fs模塊

在fs模塊中有同步和異步兩種方式

讀取文件

//異步
fs.readFile('test.txt', 'utf-8' (err, data) => {
  if (err) {
    throw err;
  }
  console.log(data);
});

//同步
let data = fs.readFileSync('test.txt');
console.log(data);

異步讀取文件參數(shù):文件路徑,編碼方式,回調(diào)函數(shù)

寫入文件

fs.writeFile('test2.txt', 'this is text', { 'flag': 'w' }, err => {
  if (err) {
    throw err;
  }
  console.log('saved');
});

寫入文件參數(shù):目標(biāo)文件,寫入內(nèi)容,寫入形式,回調(diào)函數(shù)

flag寫入方式:

r:讀取文件
w:寫文件
a:追加

創(chuàng)建目錄

fs.mkdir('dir', (err) => {
  if (err) {
    throw err;
  }
  console.log('make dir success');
});

dir為新建目錄名稱

讀取目錄

fs.readdir('dir',(err, files) => {
  if (err) {
    throw err;
  }
  console.log(files);
}); 

dir為讀取目錄名稱,files為目錄下的文件或目錄名稱數(shù)組

獲取文件信息

fs.stat('test.txt', (err, stats)=> {
  console.log(stats.isFile());     //true
})

獲取文件信息后stats方法:

方法說明
stats.isFile()是否為文件
stats.isDirectory()是否為目錄
stats.isBlockDevice()是否為塊設(shè)備
stats.isCharacterDevice()是否為字符設(shè)備
stats.isSymbolicLink()是否為軟鏈接
stats.isFIFO()是否為UNIX FIFO命令管道
stats.isSocket()是否為Socket

創(chuàng)建讀取流

let stream = fs.createReadStream('test.txt');

創(chuàng)建寫入流

let stream = fs.createWriteStreamr('test_copy.txt');

開發(fā)

開發(fā)思路:

  1. 讀取源目錄
  2. 判讀存放目錄是否存在,不存在時新建目錄
  3. 復(fù)制文件
  4. 判斷復(fù)制內(nèi)容是否為文件
  5. 創(chuàng)建讀取流
  6. 創(chuàng)建寫入流
  7. 鏈接管道,寫入文件內(nèi)容
let fs = require('fs'),
  src = 'src',
  dist = 'dist',
  args = process.argv.slice(2),
  filename = 'image',
  index = 0;

//show help
if (args.length === 0 || args[0].match('--help')) {
  console.log('--help\n \t-src 文件源\n \t-dist 文件目標(biāo)\n \t-n 文件名\n \t-i 文件名索引\n');
  return false;
}

args.forEach((item, i) => {
  if (item.match('-src')) {
    src = args[i + 1];
  } else if (item.match('-dist')) {
    dist = args[i + 1];
  } else if (item.match('-n')) {
    filename = args[i + 1];
  } else if (item.match('-i')) {
    index = args[i + 1];
  }
});

fs.readdir(src, (err, files) => {
  if (err) {
    console.log(err);
  } else {
    fs.exists(dist, exist => {
      if (exist) {
        copyFile(files, src, dist, filename, index);
      } else {
        fs.mkdir(dist, () => {
          copyFile(files, src, dist, filename, index);
        })
      }
    });
  }
});

function copyFile(files, src, dist, filename, index) {
  files.forEach(n => {
    let readStream,
      writeStream,
      arr = n.split('.'),
      oldPath = src + '/' + n,
      newPath = dist + '/' + filename + index + '.' + arr[arr.length - 1];
    fs.stat(oldPath, (err, stats) => {
      if (err) {
        console.log(err);
      } else if (stats.isFile()) {
        readStream = fs.createReadStream(oldPath);
        writeStream = fs.createWriteStream(newPath);
        readStream.pipe(writeStream);
      }
    });
    index++;
  })
}

效果

node文件批量重命名的方法示例

總結(jié)

node提供了很多模塊可以幫助我們完成不同需求的功能開發(fā),使javascript不僅僅局限與瀏覽器中,嘗試自己編寫一些腳本有助于對這些模塊的理解,同時也能提高辦公效率。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


本文題目:node文件批量重命名的方法示例
網(wǎng)站URL:http://weahome.cn/article/piiejs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部