标题: [注册表类] [已解决]BAT或VBS如何右键批量复制文件路径? [打印本页]
作者: zhanglei1371 时间: 2014-7-5 18:49 标题: [已解决]BAT或VBS如何右键批量复制文件路径?
第一步,添加注册表项:- Windows Registry Editor Version 5.00
- [HKEY_CLASSES_ROOT\*\shell\复制完整路径]
- @="复制完整路径"
- [HKEY_CLASSES_ROOT\*\shell\复制完整路径\command]
- @="Wscript.exe C:\\Windows\\复制完整路径.vbs \"%1\""
复制代码
第二步,vbs部分:复制完整路径.vbs- Set ws = CreateObject("WScript.Shell")
- s=""
- for each i in wscript.arguments
- s=s & vbcrlf & i
- next
- ws.run "mshta vbscript:clipboardData.SetData("+""""+"text"+""""+","+""""& s &""""+")(close)",0,true
复制代码
但是发现只能复制一个文件,如果我选中多个文件,要复制多个文件的路径,一个文件一行,该如何修改代码?
此外还做了个bat版的,同样有问题:
reg部分:- Windows Registry Editor Version 5.00
-
- [HKEY_CLASSES_ROOT\*\shell\bat复制完整路径]
-
- [HKEY_CLASSES_ROOT\*\shell\bat复制完整路径\command]
- cmd /c D:\桌面\bat复制路径.bat \"%1\""
复制代码
bat复制路径.bat- @echo off
- setlocal enabledelayedexpansion
- ::========================代码区===========================%
- set hc=^
-
-
- for %%i in (%*) do (
- echo %%i >>c:\tem
- set s=!s!%%i!hc!
- )
- mshta vbscript:clipboardData.SetData("text",s)(close)
- ::==================代码区===========================%
- pause>nul
复制代码
这两个问题还望高人帮忙解决,先谢过了!
作者: CrLf 时间: 2014-7-5 23:38
"%1" 改 %* 试试
sendto 可以用 %* 取得右键发送至的所有文件名,但 HKEY_CLASSES_ROOT\*\shell\ 未测试是否可行
作者: digger 时间: 2014-7-6 06:51
换个方式,把你的VBS复制到sendto文件夹,就可以了
作者: zhanglei1371 时间: 2014-7-6 09:35
回复 2# CrLf
不行的。昨天我在这上耗了大半天时间。网上能搜的大部分方法都试过了。
如改成%*,当然,放在sendto有一定效果。但是新的问题又出来了:
vbs会将换行符吃掉,所有路径连在一起;
bat一旦遇到有空格的路径就提示错误。
所以这些新的问题很麻烦,无法解决
但是我还是想知道如何通过右键,而非sendto来解决这个问题
作者: CrLf 时间: 2014-7-6 17:00
本帖最后由 CrLf 于 2014-7-6 17:01 编辑
回复 4# zhanglei1371
vbs 怎么会连成一行?本机测试无误啊
作者: zhanglei1371 时间: 2014-7-6 18:00
回复 5# CrLf
我用批处理文件进行测试,在没有带空格路径时,的确能一个路径一行;
在用vbs时,确实会连成一行,似乎前面的vbcrlf被无视了;
当然这是放到sendto文件夹里进行测试的;
不过,如果不是送到剪贴板,只是msgbox下,一切都是正常的。
一旦经过mshta送入剪贴板的一步就会出问题。
至于wscript.arguments,也试过,msgbox正常,但是一旦经过注册表就会变样。
网上查找到一个相似的软件,不知怎么做的,您可以看看,我想达到的就是这样的效果:
软件名称:CopyPathExt- http://www.onlinedown.net/soft/394549.htm
复制代码
作者: CrLf 时间: 2014-7-6 18:28
本帖最后由 CrLf 于 2014-7-6 19:23 编辑
回复 6# zhanglei1371
我知道了,把 vbcrlf 改成 """&vbcrlf&"""
至于 CopyPathExt 这款软件,它是注册了 CopyPathExt.CopyPathExt 组件实现的,所以光修改注册表实现不了它的功能
作者: CrLf 时间: 2014-7-6 19:44
本帖最后由 CrLf 于 2014-7-7 00:00 编辑
建议用 vbs,非要用 bat 的话,mshta 那句改写如下:- mshta vbscript:clipboardData.SetData("text",CreateObject("Wscript.Shell").ExpandEnvironmentStrings("%%s%%"))(close)
复制代码
作者: zhanglei1371 时间: 2014-7-6 22:29
回复 8# CrLf
感谢大师的帮助,距离完美只差半步了,运行后发现粘贴到记事本出现下面的现象:
bat后面都有个黑色方块■,vbs的没问题,如下图:【上面是批处理的结果,下面是vbs'】
另外文件多时,有时候bat会不稳定,一闪就没了。不知何故
作者: CrLf 时间: 2014-7-7 00:00
因为你的 hc 是换行符,显示在 notepad 里就是黑框,前缀个回车符就好了,把 set hc 那句改成:- for /f %%a in ('copy /z %0 nul') do set hc=%%a^
-
-
- rem hc=回车换行
复制代码
作者: HeyJude 时间: 2017-3-13 14:58
现在很需要这个主题帖中提到的功能,zhanglei1371 大侠可方便把完整的 VBS 方法与 bat 方法的完美代码都贴出来?
十分感谢!
作者: zhangop9 时间: 2022-1-23 13:46
BAT或VBS如何右键批量复制文件路径
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |