|
|
方法一是采用现有文件名修改目标文件名,方法二是采用剪贴板文本修改目标文件名。
以下示例代码采用 jscript,原因有三,一是在注册表内直接用 cmd.exe 启运批处理脚本代码可能会导致闪屏;二是 winPE 通常没有预装 powershell;三是 win11 高版本如 24H2+ 已彻底移除了 mshta 内嵌式代码应用(形如批处脚本或注册表中直接写入的 mshta VBScript:... 代码)。
以下是三个示例脚本 x1.js, x2.js, x3.js 和一个注册表设置文件 右键菜单-修改文件名.reg,四个文件假设均存放在 c:\x 目录中,变更三个 *.js 文件的存放位置,须同时更新 *.reg 文件中的对应位置。
先运行 右键菜单-修改文件名.reg,其后即可在资源管理器中使用相应的 【修改文件名】右键菜单,其中包含三个二级子菜单,第一和第二个子菜单用于上述第一个更名方法,第三个子菜单用于上述第二个更名方法。
x1.js- WSH.createObject('wscript.shell').RegWrite('HKCU\\Volatile Environment\\#$', WSH.arguments(0)), WSH.quit();
复制代码
x2.js
- v=WSH.arguments, ws=WSH.createObject('wscript.shell'), fso=WSH.createObject('scripting.filesystemobject');
- try { rv=ws.RegRead('HKCU\\Volatile Environment\\#$'); } catch(e) { ws.popup('未指定新文件名 ...5秒后退出', 5, '【报错】', 1|4096), WSH.quit(); }
- pf=fso.GetParentFolderName(v(0)), ef=fso.GetExtensionName(v(0)), nf=fso.GetBaseName(rv), f=pf+'\\'+nf+'.'+ef;
- if (rv==v(0) || fso.fileExists(f)) { ws.popup('新文件名与现有文件冲突 ...5秒后退出', 5, '【报错】', 1|4096), WSH.quit(); }
- fso.moveFile(v(0), f), WSH.quit();
复制代码 x3.js
- v=WSH.arguments, ws=WSH.createObject('wscript.shell'), fso=WSH.createObject('scripting.filesystemobject');
- c=WSH.createobject('htmlfile').parentWindow.clipboardData.getData('text');
- if (!c) { ws.popup('未发现剪贴板文本数据 ...5秒后退出', 5, '【报错】', 1|4096), WSH.quit(); } else nf=fso.getBasename(c);
- if (/[\:\?\*\<\|\>\"]/.test(nf)) { ws.popup('剪贴板路径文件名有非法字符 ...5秒后退出', 5, '【报错】', 1|4096), WSH.quit(); }
- pf=fso.getParentFolderName(v(0)), ef=fso.getExtensionName(v(0)), f=pf+'\\'+nf+'.'+ef;
- if (f.length>259) { ws.popup('剪贴板路径文件名长度超限 ...5秒后退出', 5, '【报错】', 1|4096), WSH.quit(); }
- fso.moveFile(v(0), f), WSH.quit();
复制代码 右键菜单-修改文件名.reg
- Windows Registry Editor Version 5.00
- [HKEY_CLASSES_ROOT\*\shell\ren_filename]
- @=""
- "MUIVerb"="【修改文件名】"
- "SubCommands"=""
- "Icon"="notepad.exe,0"
- [HKEY_CLASSES_ROOT\*\shell\ren_filename\shell]
- [HKEY_CLASSES_ROOT\*\shell\ren_filename\shell\1-提取文件名]
- @=""
- "MUIVerb"="先提取文件名"
- [HKEY_CLASSES_ROOT\*\shell\ren_filename\shell\1-提取文件名\command]
- @="wscript.exe /e:jscript c:\\x\\x1.js \"%1\""
- [HKEY_CLASSES_ROOT\*\shell\ren_filename\shell\2-修改文件名]
- @=""
- "MUIVerb"="后修改文件名"
- [HKEY_CLASSES_ROOT\*\shell\ren_filename\shell\2-修改文件名\command]
- @="wscript.exe /e:jscript c:\\x\\x2.js \"%1\""
- [HKEY_CLASSES_ROOT\*\shell\ren_filename\shell\3-用剪贴板数据修改文件名]
- "muiVerb"="用剪贴板文本修改文件名"
- [HKEY_CLASSES_ROOT\*\shell\ren_filename\shell\3-用剪贴板数据修改文件名\command]
- @="wscript.exe /e:jscript c:\\x\\x3.js \"%1\""
复制代码
|
|