首頁 >web前端 >js教程 >node的檔案批次重命名

node的檔案批次重命名

php中世界最好的语言
php中世界最好的语言原創
2018-03-13 17:14:071615瀏覽

這次帶給大家node的檔案批次重命名,node檔案批次重命名的注意事項有哪些,下面就是實戰案例,一起來看一下。

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

需求

現有以下圖片檔案

node的檔案批次重命名


#修改前

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


修改後

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);

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

寫入檔案

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');

開發

開發想法:

讀取來源目錄

判讀存放目錄是否存在,不存在時新目錄

複製檔案

#判斷複製內容是否為檔案

建立讀取流

#建立寫入流

連結管道,寫入檔案內容

let fs = require('fs'),
    src = 'src',
    dist = 'dist',
    args = process.argv.slice(2),
    filename = 'image',
    index = 0;//show helpif (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++;
    })
}

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

用JS程式碼做出彈幕效果

用H5的canvas做出彈幕效果
#

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

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