Board logo

标题: [注册表类] [已解决]BAT或VBS如何右键批量复制文件路径? [打印本页]

作者: zhanglei1371    时间: 2014-7-5 18:49     标题: [已解决]BAT或VBS如何右键批量复制文件路径?

第一步,添加注册表项:
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\*\shell\复制完整路径]
  3. @="复制完整路径"
  4. [HKEY_CLASSES_ROOT\*\shell\复制完整路径\command]
  5. @="Wscript.exe C:\\Windows\\复制完整路径.vbs \"%1\""
复制代码
第二步,vbs部分:复制完整路径.vbs
  1. Set ws = CreateObject("WScript.Shell")
  2. s=""
  3. for each i in wscript.arguments
  4. s=s & vbcrlf & i
  5. next
  6. ws.run "mshta  vbscript:clipboardData.SetData("+""""+"text"+""""+","+""""& s &""""+")(close)",0,true
复制代码
但是发现只能复制一个文件,如果我选中多个文件,要复制多个文件的路径,一个文件一行,该如何修改代码?

此外还做了个bat版的,同样有问题:
reg部分:
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\*\shell\bat复制完整路径]
  3. [HKEY_CLASSES_ROOT\*\shell\bat复制完整路径\command]
  4. cmd /c D:\桌面\bat复制路径.bat \"%1\""
复制代码
bat复制路径.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::========================代码区===========================%
  4. set hc=^
  5. for %%i in (%*) do (
  6. echo %%i >>c:\tem
  7. set s=!s!%%i!hc!
  8. )
  9. mshta vbscript:clipboardData.SetData("text",s)(close)
  10. ::==================代码区===========================%
  11. 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
  1. 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 那句改写如下:
  1. 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 那句改成:
  1. for /f %%a in ('copy /z %0 nul') do set hc=%%a^
  2. rem hc=回车换行
复制代码

作者: HeyJude    时间: 2017-3-13 14:58

现在很需要这个主题帖中提到的功能,zhanglei1371 大侠可方便把完整的 VBS 方法与 bat 方法的完美代码都贴出来?
  十分感谢!
作者: zhangop9    时间: 2022-1-23 13:46

BAT或VBS如何右键批量复制文件路径




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2