Vba 使用PowerShell发送击键并在文本中包含百分号

Vba 使用PowerShell发送击键并在文本中包含百分号,vba,powershell,escaping,special-characters,sendkeys,Vba,Powershell,Escaping,Special Characters,Sendkeys,我需要发送的这个长字符串与我读取它的文本文件中显示的一模一样($token=Get Content$token\u txt)。这个字符串中有几个百分号。它们需要包含在字符串中。每次我使用wshell、VB或WASP执行SendKeys,它都会从文本中删除百分号和后面的两个字符。我相信它认为这是一个特殊的字符和一些按键命令或其他东西。如何让系统忽略百分号而不将其视为特殊字符 下面是我从文本文件中读取的字符串示例,并将其设置为变量$token: YzY5FlNDItMjllctZjA4ZDVkNzU

我需要发送的这个长字符串与我读取它的文本文件中显示的一模一样(
$token=Get Content$token\u txt
)。这个字符串中有几个百分号。它们需要包含在字符串中。每次我使用wshell、VB或WASP执行
SendKeys
,它都会从文本中删除百分号和后面的两个字符。我相信它认为这是一个特殊的字符和一些按键命令或其他东西。如何让系统忽略百分号而不将其视为特殊字符

下面是我从文本文件中读取的字符串示例,并将其设置为变量
$token

YzY5FlNDItMjllctZjA4ZDVkNzUxNWM3LTE1MzMyMzMw%0AMTY2NDJ8VjBPd1BhT1JVSmtwWkxaZk1tRkNCbGNONzl5SndHb3YyQVZNVlNX%0AQWdMQT0%3D%0A
正如您所看到的,令牌中有几个百分比符号,但是这些符号需要完全按照所示发送。当我看到它被发送时,它就成功了

YzY5FlNDItMjllctZjA4ZDVkNzUxNWM3LTE1MzMyMzMwMTY2NDJ8VjBPd1BhT1JVSmtwWkxaZk1tRkNCbGNONzl5SndHb3YyQVZNVlNXQWdMQT0
就像我说的,我试过wshell、VB、WASP将所有的键都发送到PuTTY窗口,但它没有正确发送

如果我让它在PowerShell中显示变量
$token
,它会用百分号正确地显示它。只有当我在删除特殊字符时才发送密钥

以下是我尝试发送它的三种方式

$wshell = New-Object -ComObject wscript.shell;
$wshell.AppActivate('putty')
Sleep 1
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.SendKeys]::SendWait($token);

add-type -AssemblyName microsoft.VisualBasic
add-type -AssemblyName System.Windows.Forms
[Microsoft.VisualBasic.Interaction]::AppActivate("putty")
[System.Windows.Forms.SendKeys]::SendWait($token)

Select-Window putty | Send-Keys $token
Select-Window putty | Send-Keys "{ENTER}"

任何帮助都将不胜感激。

将%封装在{}中似乎就可以了

[System.Windows.Forms.SendKeys]::SendWait("Test{%}Test");

加号(+)、插入符号(^)、百分号(%)、波浪号(~)和括号()对SendKeys有特殊意义。要指定其中一个字符,请将其括在大括号({})内。例如,要指定加号,请使用“{+}”

向$token添加替换方法

$token = $token.Replace("%","{%}")

我相信你应该用反勾号来引用一个特殊的字符。我确实尝试过将反勾号添加到文本文件中,但它仍然删除了百分号和以下两个字符。你真了不起,这正是我需要的!!非常感谢。