最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年10月23日 10:18:36   作者:bestvist  
本篇文章主要介紹了node文件批量重命名的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

需求

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

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

最簡單的人力操作就是逐個(gè)文件重命名,但本著DRY(Don't repeat yourself)原則,還是寫一個(gè)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. 判讀存放目錄是否存在,不存在時(shí)新建目錄
  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++;
  })
}

效果

總結(jié)

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • nodeJS?express路由學(xué)習(xí)req.body與req.query方法實(shí)例詳解

    nodeJS?express路由學(xué)習(xí)req.body與req.query方法實(shí)例詳解

    這篇文章主要為大家介紹了nodeJS?express路由學(xué)習(xí)req.body與req.query方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Express + Node.js實(shí)現(xiàn)登錄攔截器的實(shí)例代碼

    Express + Node.js實(shí)現(xiàn)登錄攔截器的實(shí)例代碼

    本篇文章主要介紹了Express + Node.js實(shí)現(xiàn)攔截器的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • 如何利用node.js開發(fā)一個(gè)生成逐幀動(dòng)畫的小工具

    如何利用node.js開發(fā)一個(gè)生成逐幀動(dòng)畫的小工具

    這篇文章主要給大家介紹了關(guān)于如何利用node.js開發(fā)一個(gè)生成逐幀動(dòng)畫小工具的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 了不起的node.js讀書筆記之mongodb數(shù)據(jù)庫交互

    了不起的node.js讀書筆記之mongodb數(shù)據(jù)庫交互

    這篇文章主要介紹了了不起的node.js讀書筆記之mongodb數(shù)據(jù)庫交互,需要的朋友可以參考下
    2014-12-12
  • Nodejs搭建多進(jìn)程Web服務(wù)器實(shí)現(xiàn)過程

    Nodejs搭建多進(jìn)程Web服務(wù)器實(shí)現(xiàn)過程

    這篇文章主要為大家介紹了Nodejs搭建多進(jìn)程Web服務(wù)器實(shí)現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • mac中利用NVM管理不同node版本的方法詳解

    mac中利用NVM管理不同node版本的方法詳解

    這篇文章主要給大家介紹了關(guān)于在mac中利用NVM管理不同node版本的相關(guān)資料,文中詳細(xì)介紹了nvm的安裝和卸載、nvm安裝node的方法,以及nvm如何管理node版本,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Node.js數(shù)據(jù)庫鉤子的使用

    Node.js數(shù)據(jù)庫鉤子的使用

    本文主要介紹了Node.js數(shù)據(jù)庫鉤子的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Node.js開發(fā)者必須了解的4個(gè)JS要點(diǎn)

    Node.js開發(fā)者必須了解的4個(gè)JS要點(diǎn)

    這篇文章主要介紹了Node.js開發(fā)者必須了解的4個(gè)JS要點(diǎn),Node.js是一個(gè)面向服務(wù)器的框架,立足于Chrome強(qiáng)大的V8 JS引擎。盡管它由C++編寫而成,但是它及其應(yīng)用是運(yùn)行在JS上的,需要的朋友可以參考下
    2016-02-02
  • 基于NodeJS的前后端分離的思考與實(shí)踐(一)全棧式開發(fā)

    基于NodeJS的前后端分離的思考與實(shí)踐(一)全棧式開發(fā)

    這個(gè)話題最近被討論得比較多,阿里有些BU也在進(jìn)行一些嘗試。討論了很久之后,我們團(tuán)隊(duì)決定探索一套基于NodeJS的前后端分離方案,過程中有一些不斷變化的認(rèn)識以及思考,記錄在這里,也希望看到的同學(xué)參與討論,幫我們完善。
    2014-09-09
  • nvm版本導(dǎo)致npm?install報(bào)錯(cuò)Unexpected?token?'.'的解決辦法

    nvm版本導(dǎo)致npm?install報(bào)錯(cuò)Unexpected?token?'.'的解決辦法

    最近做項(xiàng)目遇到npm install 的問題,下面這篇文章主要給大家介紹了關(guān)于nvm版本導(dǎo)致npm?install報(bào)錯(cuò)Unexpected?token?'.'的解決辦法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評論

简阳市| 芜湖市| 九江市| 资兴市| 滨海县| 德令哈市| 志丹县| 泰安市| 浪卡子县| 辛集市| 双鸭山市| 邵阳县| 监利县| 永昌县| 河间市| 东城区| 博野县| 乌海市| 婺源县| 南丹县| 临邑县| 修水县| 和林格尔县| 绥化市| 富川| 沙湾县| 蓝田县| 建水县| 合川市| 儋州市| 神农架林区| 大理市| 星子县| 白河县| 泰安市| 新和县| 孙吴县| 江北区| 阿城市| 五莲县| 甘德县|