首頁  >  文章  >  web前端  >  node檔案批次重命名實例詳解

node檔案批次重命名實例詳解

小云云
小云云原創
2018-01-20 17:45:441909瀏覽

本文主要介紹了node檔案批次重命名的方法範例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。

在一個實際需求中,需要對一批檔案(如:文字、圖片)進行重新命名,依照數字編號。正好藉此熟悉了一下node的fs檔案操作,寫了一個批次修改檔名的腳本。

需求

現有以下圖片檔案

#需要批次修改檔案名稱,變成統一前綴名稱並且自增索引,修改後效果

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

研究

node中要進行檔案操作需要了解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);

非同步讀取檔案參數:檔案路徑,編碼方式,回呼函數

寫入檔案


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

寫入檔案參數:目標文件,寫入內容,寫入形式,回呼函數

flag寫入方式:

r:讀取檔案
w:寫入檔案
a:追加

##建立目錄


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為目錄下的檔案或目錄名稱陣列

#取得檔案資訊

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

取得檔案資訊後stats方法:

方法#說明 stats.isFile()是否為檔案stats.isDirectory()是否為目錄stats.isBlockDevice()是否為區塊裝置#stats.isCharacterDevice()是否為字元裝置stats.isSymbolicLink()是否為軟體連結stats.isFIFO()是否為UNIX FIFO指令管道stats.isSocket()是否為Socket建立讀取流

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

建立寫入流

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


開發


  1. #開發想法:
  2. 讀取來源目錄
  3. #判讀存放目錄是否存在,不存在時新建目錄
  4. #複製檔案
  5. 判斷複製內容是否為檔案


建立讀取流

#建立寫入流


連結管道,寫入檔案內容


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 文件目标\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提供了許多模組可以幫助我們完成不同需求的功能開發,讓javascript不僅侷限在瀏覽器中,嘗試自己編寫一些腳本有助於對這些模組的理解,同時也能提高辦公室效率。

###相關推薦:#########如何利用node實作一個批次重命名檔案的函數############PHP批次重命名某個資料夾下所有檔案的實作方法介紹############php批次重命名#######

以上是node檔案批次重命名實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn