我正在尝试将一些字符串提取到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
但是这会导致语法错误,我认为我正朝着正确的方向前进但似乎陷入困境,任何帮助你提供新手都会非常感激!
答案 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中的权限。默认情况下,会显示一个对话框,要求用户授予脚本对剪贴板的访问权限。