|
|
发表于 2026-4-15 16:42:55
|
显示全部楼层
本帖最后由 redyear2026 于 2026-4-15 16:52 编辑
处理资源管理器中的单选结果,或者是直接拖拽给脚本,或者是在注册表右键菜单中直接挂码操作,通常没有存取剪贴板这个中间环节。
但要处理多选结果,ms 提供了两种方法,一是通过 '存取剪贴板' 这个中间环节,二是通过 'sendTo(发送到)' 右键功能,直接将多选结果作为命令行参数传送给 *.bat, *.cmd, *.vbs, *.js, *.hta, *.ps1 等脚本或 *.exe 等可执行程序。
win8-11 系统均在资源管理器主页菜单内置了 '复制路径' 或 '复制文件地址' 选项,直接点击即可。多选结果的剪贴板格式为分行且每行用双引号包裹,此举是为保持每个路径文件名的完整性,否则后续若直接用于命令行参数时,可能会因其中包含空格或 &^() 等特殊字符而出错。
winXP-11 系统均在资源管理器右键菜单中内置了 '发送到' 选项,以下的批处代码是一个最简单的用法示例,目的是将多选结果分行复制到剪贴板,且无双引号包裹。但是用批处代码接收 sendTo 传参有两个短处,一是要严禁每个未含空格路径文件名不能再有 &^() 等特殊字符,二是代码运行时会有黑框闪屏。
复制选择集到剪贴板.bat
- @(for %%i in (%*) do @echo,%%i)|clip.exe
复制代码
以上代码须保存到 "%AppData%\Microsoft\Windows\SendTo\" 目录下,例如 复制选择集到剪贴板.bat,其后可在右键 '发送到' 菜单中出现 复制选择集到剪贴板.bat 选项,如果在该目录中保存的是其快捷方式,如 复制选择集到剪贴板.lnk,则在右键 '发送到' 菜单中出现的选项名可隐藏其扩展名。
如果系统支持 vbs, jscript,powershell 则可用其替换以上的批处代码文件,即可弥补上述两个短处,给一个示例代码如下(采用 jscript),其他具体用法同上(亦可参见 https://bbs.wuyou.net/forum.php? ... =450856&pid=6106344 18楼)。
复制选择集到剪贴板.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();
复制代码 |
|