本帖最后由 aloha20200628 于 2024-10-25 18:16 编辑
回复 1# lforl
一楼的注册表代码沿用了系统为资源管理器开启 ‘复制路径’ 右键菜单的通道,实测不能直接 ‘套壳’ 这段批处代码,但通过资源管理器的 ‘发送到’ 右键菜单机制确实可以挂载类似的批处代码,从而实现楼主的要求,以下是一个最简方法示例》
一。创建一个批处理脚本(代码如下)假设存为 sendTo.bat
二。复制 sendTo.bat 到 "C:\Users\本机用户名\AppData\Roaming\Microsoft\Windows\SendTo" 系统目录中(可在资源管理器地址栏输入 shell:sendto 开启该目录),其后会在资源管理器 '发送到' 右键菜单中出现名为 sendTo.bat 的选项,当单选或多选文件或目录后,点击此右键菜单选项即可完成被选结果 '无双引号包裹' 传至剪贴板的操作@echo off &(for %%i in (%*) do @echo,%%~i)|clip.exe&exit/bCOPY 但这个用法至少有两点限制》
一。被选文件或目录的字符总量不能超过8K,即受限于系统命令行参数的字符总量限制
二。批处脚本被调用过程会导致闪屏,这是因开关cmd窗口所致
改用 vbs 或 jscript 代码替换批处脚本是一个没有闪屏和突破选择集字符量8K限制的解决方案,以下代码是一个jscript版本,假设存为 sendTo.js,直接复制到上述系统目录中,其后会在资源管理器 '发送到' 右键菜单中出现名为 sendTo.js 的选项,当单选或多选文件或目录后,点击此右键菜单选项即可完成被选结果 '无双引号包裹' 传至剪贴板的操作 | v=WSH.arguments, ws=WSH.createObject('WScript.shell'); | | for (s='',n=0,l=v.length; n<l; n++) s+=v(n).replace(/\"/g,'')+'\r\n'; | | fso=WSH.createObject('Scripting.FileSystemObject'); | | tF=ws.expandEnvironmentStrings('%temp%')+'\\_.clipT'; | | fp=fso.OpenTextFile(tF,2,true), fp.write(s.slice(0,-2)), fp.close(); | | ws.run('cmd.exe /c clip.exe<'+tF+'&&del/q '+tF, 0, false), WSH.quit();COPY |
|