VBS将文本复制到剪贴板,不带引号

时间:2019-02-26 11:44:17

标签: vbscript

我试图获取路径,该路径由上下文菜单“复制路径”的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个字符。在剪贴板中的标记中放置文本,将整个字符串放回剪贴板中。有什么已知的原因吗?

1 个答案:

答案 0 :(得分:0)

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