【问题标题】:VBS Copy text to clipboard without quotationmarksVBS 将文本复制到剪贴板,不带引号
【发布时间】:2019-02-26 11:44:17
【问题描述】:

我试图获取路径,由上下文菜单“复制路径”的 Win7 功能复制 此路径总是带有引号的剪贴板。 我在 Word 中制作了一个 makro,我把标记去掉了。然后我尝试在 VBS 中执行此操作,但它不起作用。 在我的测试中,我发现如果我执行此代码,引号之间的任何文本都不会被放回剪贴板。 (简体)

Dim string

' Get clipboard text
Set objHTML = CreateObject("htmlfile")
String= objHTML.ParentWindow.ClipboardData.GetData("text")


String = Left(String,2)
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c echo " & String & " | clip", 0, TRUE

当文本不在引号中时有效 - 只剩下 2 个字符。将文本放入剪贴板的标记中,将整个字符串放回剪贴板。有什么已知的原因吗?

【问题讨论】:

  • String = Replace(objHTML.ParentWindow.ClipboardData.GetData("text"), """", "")

标签: vbscript


【解决方案1】:

Left Function 定义如下:

语法

Left(string, length)

从a的左侧返回指定数量的字符 字符串。

您需要编写自己的函数来去除双引号中的字符串:

VBScript

option explicit

Function Dequote( sString )
  If Left( sString, 1 ) = """" And Right( sString, 1 ) = """" Then 
    Dequote = Mid( sString, 2, Len( sString) - 2)
  Else
    Dequote = sString
  End If
End Function

Dim String, objHTML, WshShell
' Get clipboard text
Set objHTML = CreateObject( "htmlfile")
String = objHTML.ParentWindow.ClipboardData.GetData( "text")

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "cmd.exe /c echo(" & Dequote( String) & "|clip", 0, TRUE

Wscript.Echo String, Dequote( String)   ' debugging output

VBA(单行 if 语法,未验证):

Private Function Dequote(S As String) As String
If Left(S, 1) = """" And Right(S, 1) = """" Then Dequote = Mid(S, 2, Len(S) - 2) Else Dequote = S
End Function

【讨论】:

  • 这很好用。谢谢。我使用 left() 进行演示,我在变量中操作字符串并将其提供给剪辑。您也可以这样做,但通过提供给 cmd.exe 的字符串中的函数调用它。为什么当我在引号中给出变量时它不接受我的变量,但在不接受的时候呢? (当字符串不在引号中时,我得到了 2 个字符,但在引号中时得到了整个字符串。这很奇怪吗?)细细,非常感谢!!
  • VBA 部分可以很好地处理字符串。是一样的,我试过这段代码:Sub zwischI() Set objHTML = CreateObject("htmlfile") strDrin = objHTML.parentWindow.clipboardData.GetData("text") strDrin = Mid(strDrin, 2, Len(strDrin) - 2) Debug.Print Text objHTML.parentWindow.clipboardData.setdata "Text", strDrin End Sub 这也有效(不检查引号是否存在),但不要把它放回剪贴板。
  • @czil 不幸的是,.clipboardData.SetData 方法不会更改 VBScript 中 htmlfile COM 对象的剪贴板(以及.clipboardData.ClearData)。作品例如对于InternetExplorer.Application COM object
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多