盘点一下批量修改百度云盘文件名的方法

写在最前

首先我知道大家肯定是对百度云分享的各种文件里面充斥的各种广告深恶痛绝吧,例如本站,我就喜欢在各种分享里面加上自己博客的广告,明明也是白嫖的,非要加上自己的广告,其实真的是情非得已哈。当然我的目的也很单纯就是希望宣传一下,同时能够在链接里面引留而已。鉴于此,我决定写一篇文章,让大家摆脱此困境。目前主流的批量修改百度云内文件名的方法主要为调用百度云修改文件名的API,其中实现的方式主要有油猴脚本、Pandown、某些小软件等等。操作简单,便于使用,没有任何技术含量。

《盘点一下批量修改百度云盘文件名的方法》

油猴脚本

首先需要安装油猴的插件,挂上梯子

chrome浏览器–>访问https://chrome.google.com/webstore/search/VNC?hl=zh-CN

搜索 Tampermonkey 点击安装这个插件,安装成功后会出现以下这个小图标,如果没有梯子,百度下载个插件双击安装即可。

《盘点一下批量修改百度云盘文件名的方法》

点击添加新脚本,之后拷贝以下代码安装(保存即可)即可。

《盘点一下批量修改百度云盘文件名的方法》

代码1-批量查找关键词语进行替换,不宜选择过多,会报错,另外UI有点变形,不影响使用;

// ==UserScript==
// @name        百度网盘一键批量修改后缀&批量替换文件名
// @namespace    dupanBatchRename
// @version      0.1.3
// @description  百度网盘一键批量修改后缀,默认修改为MP4;批量替换文件名。【说明:批量改后缀强制改所有后缀,批量替换文件名可以替换一些垃圾版权信息】
// @author       ding(AT)gong.si
// @match        *://pan.baidu.com/disk/home*
// @match        *://yun.baidu.com/disk/home*
// @require      https://code.jquery.com/jquery-latest.min.js
// @run-at       document-end
// @grant        unsafeWindow
// @grant        GM_addStyle
// ==/UserScript==

//日志函数
var debug = false;
var log_count = 1;
function slog(c1,c2,c3){
    c1 = c1?c1:'';
    c2 = c2?c2:'';
    c3 = c3?c3:'';
    if(debug) console.log('#'+ log_count++ +'-ScriptLog:',c1,c2,c3);
}

var yunData,timestamp,bdstoken,logid;
var fileList=[];
var panAPIUrl = location.protocol + "//" + location.host + "/api/";
var restAPIUrl = location.protocol + "//pcs.baidu.com/rest/2.0/pcs/";
var clientAPIUrl = location.protocol + "//d.pcs.baidu.com/rest/2.0/pcs/";
var theext = 'mp4';

//获取当前目录
function getPath(){
    var hash = location.hash;
    var regx = /(^|&|\/)path=([^&]*)(&|$)/i;
    var result = hash.match(regx);
    return decodeURIComponent(result[2]);
}

function getCookie(e) {
    var o, t;
    var n = document,c=decodeURI;
    return n.cookie.length > 0 && (o = n.cookie.indexOf(e + "="),-1 != o) ? (o = o + e.length + 1,t = n.cookie.indexOf(";", o),-1 == t && (t = n.cookie.length),c(n.cookie.substring(o, t))) : "";
}

function getLogID(){
    var name = "BAIDUID";
    var u = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/~!@#¥%……&";
    var d = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
    var f = String.fromCharCode;
    function l(e){
        var n;
        if (e.length < 2) {
            n = e.charCodeAt(0);
            return 128 > n ? e : 2048 > n ? f(192 | n >>> 6) + f(128 | 63 & n) : f(224 | n >>> 12 & 15) + f(128 | n >>> 6 & 63) + f(128 | 63 & n);
        }
        n = 65536 + 1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320);
        return f(240 | n >>> 18 & 7) + f(128 | n >>> 12 & 63) + f(128 | n >>> 6 & 63) + f(128 | 63 & n);
    }
    function g(e){
        return (e + "" + Math.random()).replace(d, l);
    }
    function m(e){
        var n = [0, 2, 1][e.length % 3];
        var t = e.charCodeAt(0) << 16 | (e.length > 1 ? e.charCodeAt(1) : 0) << 8 | (e.length > 2 ? e.charCodeAt(2) : 0);
        var o = [u.charAt(t >>> 18), u.charAt(t >>> 12 & 63), n >= 2 ? "=" : u.charAt(t >>> 6 & 63), n >= 1 ? "=" : u.charAt(63 & t)];
        return o.join("");
    }
    function h(e){
        return e.replace(/[\s\S]{1,3}/g, m);
    }
    function p(){
        return h(g((new Date()).getTime()));
    }
    function w(e,n){
        return n ? p(String(e)).replace(/[+\/]/g, function(e) {
            return "+" == e ? "-" : "_";
        }).replace(/=/g, "") : p(String(e));
    }
    return w(getCookie(name));
}

function getTimestamp(){
    return yunData.timestamp;
}

function getBDStoken(){
    return yunData.MYBDSTOKEN;
}

function getFileList(){
    var filelist = [];
    var listUrl = panAPIUrl + "list";
    var path = getPath();
    bdstoken = getBDStoken();
    slog('path:',path);
    logid = getLogID();
    var params = {
        dir:path,
        bdstoken:bdstoken,
        logid:logid,
        order:'size',
        desc:0,
        clienttype:0,
        showempty:0,
        web:1,
        channel:'chunlei',
        appid:250528
    };
    $.ajax({
        url:listUrl,
        async:false,
        method:'GET',
        data:params,
        success:function(response){
            filelist = 0===response.errno ? response.list : [];
        }
    });
    return filelist;
}

function rename(filelist){
    url = panAPIUrl + 'filemanager?opera=rename&async=2&channel=chunlei&web=1&app_id=250528&bdstoken='+ bdstoken +'&logid='+ logid +'&clienttype=0';
    var params = {
        filelist:JSON.stringify(filelist),
    };
    $.ajax({
        url:url,
        method:'POST',
        async:false,
        data:params,
        success:function(response){
            slog('response :',response);
            if(response.errno == 0){
                alert('恭喜修改成功,共修改成功 ' + filelist.length + ' 个文件,刷新页面即可看到改变');
                window.location.reload(true);
            }else{
                alert('修改失败,请重新登录再试。如果持续失败,可能是百度接口发生改变。');
            }
        }
    });
}

function do_rename(){
    var name = prompt("请输入要改成的后缀", "mp4");
    if (name){
        theext = name.split(".").pop();
    }else{
        return true;
    }
    if(fileList.length === 0){
        fileList = getFileList();
    }
    slog('fileList:',fileList);
    slog('fileList_Length:',fileList.length);
    if(fileList.length > 0){
        var toRename = [];
        $(fileList).each(function (i){
            slog('fileList '+ i +':',this.path);
            if(this.isdir == 1) return true; //跳过目录 2017-3-4 22:34:34
            fileNameArray = this.path.split(".");
            fileext = fileNameArray.pop();
            if(fileext == theext) return true;
            slog('FileExt :',fileext);
            fileNameArray.push(theext);
            newPath = fileNameArray.join('.');
            slog('newPath :',newPath);
            newName = newPath.split('/').pop();
            slog('newName :',newName);
            toRename.push({"path":this.path,"newname":newName});
        });
        slog('toRename :',toRename);
        if(toRename.length > 0){
            rename(toRename);
        }else{
            alert('好像你的后缀无需更改');
        }
    }else{
        alert('这个目录文件列表为空');
    }
}

function do_replacename(){
    var str_to_find = prompt("输入要替换的字符串(不能为空)", "");
    if (!str_to_find){
        return true;
    }
    var str_to_replace = prompt("替换成什么?(可以为空)", "");
    if(fileList.length === 0){
        fileList = getFileList();
    }
    slog('fileList:',fileList);
    slog('fileList_Length:',fileList.length);
    if(fileList.length > 0){
        var toRename = [];
        $(fileList).each(function (i){
            slog('fileList '+ i +':',this.path);
            if(this.isdir == 1) return true; //跳过目录 2017-3-4 22:34:34
            pathArray = this.path.split("/");
            fileName = pathArray.pop();
            var pattern=new RegExp(str_to_find);
            if(pattern.test(fileName)){
                newName = fileName.replace(str_to_find, str_to_replace);
                slog('newName :',newName);
                toRename.push({"path":this.path,"newname":newName});
            }
        });
        slog('toRename :',toRename);
        if(toRename.length > 0){
            rename(toRename);
        }else{
            alert('好像没有替换');
        }
    }else{
        alert('这个目录文件列表为空');
    }
}

//入口函数
(function (){
    //获取云盘数据
    yunData = unsafeWindow.yunData;
    slog('yunData:',yunData);
    if(yunData === undefined){
        slog('页面未正常加载,或者百度已经更新!');
        return;
    }
    var q_sel = document.querySelectorAll('[data-button-id="b37"]')[0].parentNode;
    var ele_to_add = document.createElement('a');
    ele_to_add.className = "g-button";
    ele_to_add.onclick = do_rename;
    $(ele_to_add).html('<span class="g-button-right"><em class="icon icon-edit" title="一键批量改后缀"></em><span class="text" style="width: auto;">一键批量改后缀</span></span>');
    q_sel.appendChild(ele_to_add);
    var ele_to_add2 = document.createElement('a');
    ele_to_add2.className = "g-button";
    ele_to_add2.onclick = do_replacename;
    $(ele_to_add2).html('<span class="g-button-right"><em class="icon icon-edit" title="批量替换文件名"></em><span class="text" style="width: auto;">批量替换文件名</span></span>');
    q_sel.appendChild(ele_to_add2);
})();

代码2-支持批量重命名文件,可以批量的为文件加入关键词等信息,不支持查找替换,实话匹配规则写的有点问题。不太推荐使用,但是速度还是可以的,不卡;

// ==UserScript==
// @name         百度网盘一键重命名当前目录
// @namespace    http://tampermonkey.net/
// @version      0.13
// @author       codeshif
// @match        https://pan.baidu.com/*
// @description  用于百度云一键重命名当前目录
// @match        https://pan.baidu.com/*
// @require      https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    var btnToolBoxHTML = '<a class="g-button" href="javascript:;" title="批量重命名" style="display: inline-block;"><span class="g-button-right"><em class="icon icon-search" title="批量重命名"></em><span class="text" style="width: auto;">批量重命名</span></span></a>';

    $(btnToolBoxHTML).appendTo('.tcuLAu').click(function () {

        var origin = prompt('请输入想要替换的字符');
        if(origin == undefined || origin.length <= 0){

            window.yunHeader.tools.ui.tip.show({
                msg: "想要替换的字符不能为空",
                type:'failure'
            });
            return false;
        }
        var persent = prompt('请输入要替换成什么');
        renames(origin,persent);

        return false;
    });



    async function renames(origin,persent) {

        var fileNames = $('.file-name .text a').map(function(){return $(this).text();});

        fileNames = $.grep(fileNames, function (element, i) {
            return element.indexOf(origin) != -1;
        });

        var path = $('.FuIxtL li[node-type] span:last');
        if(path.length <= 0){

            window.yunHeader.tools.ui.tip.show({
                msg: "没有找到路径元素",
                type:'failure'
            });
            return false;
        }

        window.yunHeader.tools.ui.tip.show({
            msg: "正在重命名……"
        });
        path = path.attr('title').replace('全部文件', '') + '/';

        var data = $.map(fileNames, function (element, i) {
            return {
                path : path + element,
                newname : element.replace(origin, persent)
            }
        });


        $.ajax([
                'https://pan.baidu.com/api/filemanager?',
                'opera=rename&async=2&onnest=fail&channel=chunlei&web=1&app_id=250528&bdstoken=',
                window.locals.get('bdstoken'),
                '&logid=',
                getLogID(),
                '=&clienttype=0'
            ].join(''), {

            type:'post',
            data:{
                filelist : JSON.stringify(data)
            },
            complete:function () {

                window.yunHeader.tools.ui.tip.show({
                    msg: "重命名已执行完成,正在刷新页面……",
                    type:'success'
                });

                setTimeout(function () {
                    location.reload(true);
                }, 4000);

            }
        });
    }

    function rename(oldName, newName) {

        var path = $('.FuIxtL li[node-type] span:last');
        if(path.length <= 0){

            window.yunHeader.tools.ui.tip.show({
                msg: "没有找到路径元素",
                type:'failure'
            });
            return false;
        }

        path = path.attr('title').replace('全部文件', '') + '/' + oldName;

        return new Promise((resolve,reject) => {

            $.ajax([
                    'https://pan.baidu.com/api/filemanager?',
                    'opera=rename&async=2&onnest=fail&channel=chunlei&web=1&app_id=250528&bdstoken=',
                    window.locals.get('bdstoken'),
                    '&logid=',
                    getLogID(),
                    '==&clienttype=0'
                ].join(''), {

                type:'post',
                data:{
                    filelist : JSON.stringify([{
                            path : path,
                            newname : newName
                        }])
                },
                complete:function () {

                    setTimeout(resolve,1500);
                }
            });

        });

    }

    function getLogID() {

        var n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/~!@#¥%……&";
        var r = String.fromCharCode;
        var a = function(e) {
            if (e.length < 2) {
                var t = e.charCodeAt(0);
                return 128 > t ? e: 2048 > t ? r(192 | t >>> 6) + r(128 | 63 & t) : r(224 | t >>> 12 & 15) + r(128 | t >>> 6 & 63) + r(128 | 63 & t)
            }
            var t = 65536 + 1024 * (e.charCodeAt(0) - 55296) + (e.charCodeAt(1) - 56320);
            return r(240 | t >>> 18 & 7) + r(128 | t >>> 12 & 63) + r(128 | t >>> 6 & 63) + r(128 | 63 & t)
        };
        var o = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g;
        var c = function(e) {
            return (e + "" + Math.random()).replace(o, a)
        };
        var i = function(e) {
            var t = [0, 2, 1][e.length % 3],
            r = e.charCodeAt(0) << 16 | (e.length > 1 ? e.charCodeAt(1) : 0) << 8 | (e.length > 2 ? e.charCodeAt(2) : 0),
            a = [n.charAt(r >>> 18), n.charAt(r >>> 12 & 63), t >= 2 ? "=": n.charAt(r >>> 6 & 63), t >= 1 ? "=": n.charAt(63 & r)];
            return a.join("")
        };
        var d = function(e) {
            return e.replace(/[\s\S]{1,3}/g, i)
        };
        var l = function() {
            return d(c((new Date).getTime()))
        };
        var u = function(e, t) {
            return t ? l(String(e)).replace(/[+\/]/g,
            function(e) {
                return "+" == e ? "-": "_"
            }).replace(/=/g, "") : l(String(e))
        };
        var f = function(e) {
            var t, n;
            return document.cookie.length > 0 && (t = document.cookie.indexOf(e + "="), -1 != t) ? (t = t + e.length + 1, n = document.cookie.indexOf(";", t), -1 == n && (n = document.cookie.length), decodeURI(document.cookie.substring(t, n))) : ""
        };
        var h = function(e) {
            var t = new RegExp(e + "=([^#&]*)", "g"),
            n = t.exec(location.hash);
            return n ? decodeURIComponent(n[1]) : ""
        }

        return u(f('BAIDUID'));

    }

//    function _x(STR_XPATH) {
//        var xresult = document.evaluate(STR_XPATH, document, null, XPathResult.ANY_TYPE, null);
//        var xnodes = [];
//        var xres;
//        while (xres = xresult.iterateNext()) {
//            xnodes.push(xres);
//        }
//
//        return xnodes;
//    }

    // Your code here...
})();

Pandown

pandown最近复活了,使用更简单,登录帐号,选中文件夹,之后点右键,搜索关键词,遍历文件夹,替换即可(瑞克论坛的大佬不要揍我啊),当时不显示,可以点击右键刷新一下。下载地址:传送门

《盘点一下批量修改百度云盘文件名的方法》

《盘点一下批量修改百度云盘文件名的方法》

小工具

这是52大佬的原创工具,亲测可用,登录的时候还是百度的老毛病了,可能需要扫码登录,不用担心帐号和病毒,因为测试过很多人了。记得把软件放到杀毒软件白名单,软件虽小,功能还是挺全的。

【2020-8-2-修复4.0】百度云批量改名重命名工具一键批量修改百度云文件

《盘点一下批量修改百度云盘文件名的方法》

使用*#符号可以对文件进行数字编号
*代表原文件名
#代表数字编号
支持后缀修改
前后修改
名字替换
文件夹修改

下载地址:https://huke.lanzoui.com/iTINufd690d【修复登录问题2020年8月7日】

结束语

虽然在分享中加广告有点恶心,但是平心而论,网站发展和白嫖取个中间值,又何尝不可。对了,批量修改后缀还可以实现百度防吞功能,所以活学活用,祝大家学到用到,开发出更好的功能。

发表回复