首页 / js教程

    node的文件批量重命名

    类型:原创      发布者:php中世界最好的语言2018-03-13 17:14:07

    这次给大家带来node的文件批量重命名,node文件批量重命名的注意事项有哪些,下面就是实战案例,一起来看一下。

    在一个实际需求中,需要对一批文件(如:文本、图片)进行重命名,按照数字编号。正好借此熟悉了一下node的fs文件操作,写了一个批量修改文件名的脚本。

    需求

    现有以下图片文件

    1.jpg


    修改前

    需要批量修改文件名称,变为统一前缀名称并且自增索引,修改后效果


    修改后

    2.jpg

    最简单的人力操作就是逐个文件重命名,但本着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中文网其它相关文章!

php中文网赞助会员

PHP中文网

未登录