如何逃避特殊的角色

时间:2018-02-16 23:36:27

标签: windows powershell

我正在使用下面的代码发送一些密钥来自动化我公司的某些流程。

$wshell = New-Object -ComObject wscript.shell;

$wshell.SendKeys("here comes my string");

问题是必须对发送的字符串进行清理以逃避某些特殊字符here所述。

例如:{, [, +, ~所有这些符号必须像{{}, {[}, {+}, {~}

一样进行转义

所以我想知道:有没有简单/干净的方法来替换字符串?我不想使用大量string.replace("{","{{}"); string.replace("[","{[}")

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以使用此处字符串

注意: Here Strings 是为多行字符串设计的,但您仍然可以使用它们来转义表达式字符。

正如this网站所述。

  

此处字符串是单引号或双引号字符串,可以   跨越多行。单引号字符串中的表达式不是   评价。

     

here-string中的所有行都被解释为字符串,   即使它们没有用引号括起来。

示例:

  

要声明此处的字符串,您必须为文本使用换行符   本身,Powershell语法。

$string = @'
{ [ + ~ ! £ $ % ^ & ( ) _ - # ~ @ '' "" 
'@

输出:{ [ + ~ ! £ $ % ^ & ( ) _ - # ~ @ '' ""

答案 1 :(得分:0)

您可以使用正则表达式(简称RegEx)来执行此操作。 RegEx用于模式匹配,可以满足您的需求。在定义RegEx模式之前,您需要转义RegEx的字符,因此我们将制作一个特殊字符数组,将它们转义,并将它们全部加入|(表示OR ),然后用-replace运算符替换它。

$SendKeysSpecialChars = '{','}','[',']','~','+','^','%'
$ToEscape = ($SendKeysSpecialChars|%{[regex]::Escape($_)}) -join '|'
"I need to escape [ and } but not # or !, but I do need to for %" -replace "($ToEscape)",'{$1}'

产生:

I need to escape {[} and {}} but not # or !, but I do need to for {%}

只需将前两个放在脚本的开头附近,然后根据需要使用替换。或者创建一个可以调用的功能,以便为您处理替换和SendKeys呼叫。