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

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

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

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

需求

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

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

最簡(jiǎn)單的人力操作就是逐個(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方法:

方法 說(shuō)明
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');

開(kāi)發(fā)

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(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í)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 如何利用node.js開(kāi)發(fā)一個(gè)生成逐幀動(dòng)畫的小工具

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

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了Node.js開(kāi)發(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í)踐(一)全棧式開(kāi)發(fā)

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

    這個(gè)話題最近被討論得比較多,阿里有些BU也在進(jìn)行一些嘗試。討論了很久之后,我們團(tuán)隊(duì)決定探索一套基于NodeJS的前后端分離方案,過(guò)程中有一些不斷變化的認(rèn)識(shí)以及思考,記錄在這里,也希望看到的同學(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 的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于nvm版本導(dǎo)致npm?install報(bào)錯(cuò)Unexpected?token?'.'的解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評(píng)論

德庆县| 宣武区| 象州县| 沂源县| 承德市| 望奎县| 香港 | 黎川县| 轮台县| 呼和浩特市| 山西省| 汝南县| 乌鲁木齐市| 滨州市| 固安县| 永宁县| 许昌县| 黄冈市| 泾源县| 海安县| 龙岩市| 墨玉县| 兖州市| 井研县| 汝城县| 东阳市| 白朗县| 元朗区| 白河县| 大宁县| 横山县| 海盐县| 东明县| 淮安市| 赤城县| 广安市| 武汉市| 普陀区| 内乡县| 张家港市| 巴楚县|