您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
A tool for renaming files on web-based Baidu Netdisk 百度网盘网页版的文件重命名脚本
当前为
// ==UserScript== // @name baidu-netdisk-rename // @namespace http://tampermonkey.net/ // @version 0.1 // @description A tool for renaming files on web-based Baidu Netdisk 百度网盘网页版的文件重命名脚本 // @author neotan // @match https://pan.baidu.com/disk/* // @grant GM_addStyle // @grant GM_getResourceText // @resource purecss https://cdn.jsdelivr.net/npm/[email protected]/build/pure-min.min.css // @resource responsiveCss https://cdn.jsdelivr.net/npm/[email protected]/build/grids-responsive-min.css // ==/UserScript== ;(async function() { 'use strict' // ------------------- Utilities START ------------------- // var filemanagerUrl = 'https://pan.baidu.com/api/filemanager?opera=rename&async=2&onnest=fail&channel=chunlei&web=1&app_id=250528&bdstoken=19242d6d3971529615284f88b3e97255&logid=MTU4NDcwNjcxNjE5NzAuNDI5MDIyMzE5MjMwMzE3NzU=&clienttype=0' var taskqueryUrl ='https://pan.baidu.com/share/taskquery?taskid=139129799582709&channel=chunlei&web=1&app_id=250528&bdstoken=19242d6d3971529615284f88b3e97255&logid=MTU4NDcwNjcxNzk0NzAuMTg4MjI5NjY1MjE1NjQ0Nzc=&clienttype=0' function getFileNames() { var nodes = document.querySelectorAll('.file-name .text a') return [...nodes].map(n => n.textContent) } function createFileName(oldName, searchStr, replaceStr, applyToAll, caseSenstive) { var g = applyToAll ? 'g' : '' var i = caseSenstive ? '' : 'i' var rex = new RegExp(searchStr, g + i) return oldName.replace(rex, replaceStr) } function getCWD() { var addr = window.location.href var urlParams = new URLSearchParams(addr.substring(addr.indexOf('?') + 1)) var cwd = urlParams.get('path') if (!cwd) { throw new Error("Can't get current working directory.") } return cwd } function getActions(cwd, fileNames, searchStr, replaceStr, applyToAll = true, caseSenstive = false) { return fileNames .map(name => { var path = cwd + '/' + name var newname = createFileName(name, searchStr, replaceStr, applyToAll, caseSenstive) return name !== newname ? { path, newname } : '' }) .filter(action => action) } function getFormData(actions) { var formData = new FormData() formData.append('filelist', JSON.stringify(actions)) return formData } function showMsg(msg){ $('.msg').text(msg).show('slow').delay(10000).hide(500) } function postData(url, formData) { fetch(url, { method: 'POST', body: formData, }) .then(res => res.json()) .catch(err => console.error('Error:', err)) .then(res => console.log('Response:', res)) } // ------------------- Utilities END ------------------- // // ------------------- Main Functions declaration START ------------------- // var msg = '' var customCss = ` .pure-g { padding: 5px; display: flex; align-items: center; background: #f1f1f1; } .rename-form { width: 100%; } .rename-form > label:not(:first-child), button:not(:first-child) { margin-left: 5px; } .outter{ display: flex; } .msg{ background: #b1e279 } ` var domHtml = ` <div class="outter"> <button class="pure-button pure-button-primary toggle-btn">Toggle</button> <form class="pure-g pure-form rename-form"> <label class="pure-u-1 pure-u-xl-4-24 pure-u-lg-8-24">Replace: <input type="text" name="searchStr" value=""/></label> <label class="pure-u-1 pure-u-xl-4-24 pure-u-lg-8-24">with: <input type="text" name="replaceStr" value=""/></label> <label class="pure-u-1 pure-u-xl-3-24 pure-u-lg-8-24">Extension: <input type="text" name="extention" size=10 value=".mp4" placeholder="all files"/></label> <label class="pure-u-1 pure-u-xl-3-24 pure-u-lg-8-24 pure-button">Case Senstive? <input type="checkbox" name="caseSenstive" checked></label> <label class="pure-u-1 pure-u-xl-3-24 pure-u-lg-8-24 pure-button">Apply to all? <input type="checkbox" name="applyToAll" checked></label> <button type="submit" class="pure-u-1 pure-u-xl-3-24 pure-u-lg-6-24 pure-button pure-button-primary">Rename!</button> <a class="pure-link author-label" href="https://greasyfork.org/en/scripts/395215-numbeo-cost-of-living-comparison">☸</a> </form> <div class="msg">${msg}</div> </div> ` function main() { GM_addStyle(GM_getResourceText('purecss')) GM_addStyle(GM_getResourceText('responsiveCss')) GM_addStyle(customCss) $('#layoutMain').prepend($(domHtml)) // initiate listeners $('.toggle-btn').click(() => $('.rename-form').slideToggle('fast')) $('.rename-form').submit(function(event) { event.preventDefault() var urlParams = new URLSearchParams($(this).serialize()) var searchStr = urlParams.get('searchStr') var replaceStr = urlParams.get('replaceStr') var extention = urlParams.get('extention') var applyToAll = urlParams.get('applyToAll') var caseSenstive = urlParams.get('caseSenstive') var fileNames = getFileNames().filter(name => name.endsWith(extention)) var actions = getActions(getCWD(), fileNames, searchStr, replaceStr, applyToAll, caseSenstive) var formData = getFormData(actions) if (actions.length> 0) { postData(filemanagerUrl, formData) postData(taskqueryUrl, formData) showMsg(`${actions.length} files renamed! Please REFRESH the page.`) } else { showMsg('Nothing matched!') } }) console.log('baidu-netdisk-rename initiated!') } // ------------------- Main Functions declaration END ------------------- // // ------------------- Main Functions execution START ------------------- // main() })()