1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      node文件批量重命名的方法示例

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

      成都創(chuàng)新互聯(lián)致力于成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計,成都網(wǎng)站設(shè)計,集團網(wǎng)站建設(shè)等服務(wù)標準化,推過標準化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進行質(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中要進行文件操作需要了解一下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ù):目標文件,寫入內(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 文件目標\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)。


      網(wǎng)頁名稱:node文件批量重命名的方法示例
      當前路徑:http://www.ef60e0e.cn/article/piiejs.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        古丈县| 承德县| 宁明县| 遂昌县| 福海县| 东海县| 左贡县| 江川县| 怀来县| 七台河市| 紫金县| 泰顺县| 运城市| 阿拉尔市| 梁河县| 恩施市| 台东县| 舞阳县| 日喀则市| 汉中市| 马关县| 昌图县| 新河县| 奈曼旗| 杨浦区| 尚义县| 库伦旗| 河源市| 双江| 鹿邑县| 河曲县| 交城县| 义乌市| 湄潭县| 平塘县| 克拉玛依市| 北辰区| 永兴县| 中西区| 剑川县| 清苑县|