复制到剪贴板时使用vbCRLF发出问题

时间:2014-09-25 10:52:39

标签: vbscript cmd

我正在尝试将一些字符串提取到Windows剪贴板中,这很正常;但是试图在每个字符串之间放置一个回车符和换行符会导致问题,我知道它与这个帖子有关:Escape angle brackets in a Windows command prompt

但我无法让我的代码使用提供的信息。

这是我没有任何vbCRLF的代码;

Dim objShell
Set objShell = CreateObject("WScript.shell")

objShell.Run "cmd /C echo " & Control_Address1.text & Control_Address2.text & Control_Address3.text & Control_Address4.text & "  | CLIP", 2

这导致字符串Address1-4上的内容一个接一个地输出,但我希望它们采用这种格式。

Address1
Address2
Address3
Address4

我试过了:

objShell.Run "cmd /C echo " & Control_Address1.text & vbCRLF & Control_Address2.text & vbCRLF & Control_Address3.text & vbCRLF & Control_Address4.text & "  | CLIP", 2

这导致了' vbCTRL'被放在剪贴板中,结果我学会了转义字符。然后我根据上面的线程尝试了以下代码。

objShell.Run "cmd /C echo " & Control_Address1.text ^& vbCRLF ^& Control_Address2.text ^& vbCRLF ^& Control_Address3.text & vbCRLF & Control_Address4.text & "  | CLIP", 2

但是这会导致语法错误,我认为我正朝着正确的方向前进但似乎陷入困境,任何帮助你提供新手都会非常感激!

1 个答案:

答案 0 :(得分:2)

问题是您无法在命令行中放置CRLF。但是,如果您需要存储在剪贴板中的数据少于8191个字符,则可以将其存储在环境变量中,并且通过延迟扩展,从cmd检索它。

Option Explicit

Dim buffer
    buffer = Join( Array("Address1", "Address2", "Address3"), vbCRLF )

    With WScript.CreateObject("WScript.Shell") 
        .Environment("Process").Item("##") = buffer
        .Run "cmd /c ""(cmd /v:on /c echo(!##!)|clip"" ", 0, true
    End With

放入剪贴板的数据存储在环境变量(称为##)中,然后在启用延迟扩展(/v:on)的情况下调用命令处理器,这是要求能够正确用CRLF回显变量的内容。

还有一种替代方法,使用Internet Explorer

....
With CreateObject("InternetExplorer.Application")
    .Navigate "about:blank"
    .document.parentwindow.clipboardData.SetData "text", buffer
    .Quit
End With

但为了实现这一点,您可能需要调整IE中的权限。默认情况下,会显示一个对话框,要求用户授予脚本对剪贴板的访问权限。