本文主要介紹了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); });
##
fs.stat('test.txt', (err, stats)=> { console.log(stats.isFile()); //true })
取得檔案資訊後stats方法:
stats.isDirectory() | |
stats.isBlockDevice() | |
#stats.isCharacterDevice() | |
stats.isSymbolicLink() | |
stats.isFIFO() | |
stats.isSocket() | |
let stream = fs.createReadStream('test.txt');
建立寫入流
let stream = fs.createWriteStreamr('test_copy.txt');
開發
#建立寫入流
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中文網其他相關文章!