我正在使用下面的代码发送一些密钥来自动化我公司的某些流程。
$wshell = New-Object -ComObject wscript.shell;
$wshell.SendKeys("here comes my string");
问题是必须对发送的字符串进行清理以逃避某些特殊字符here所述。
例如:{, [, +, ~
所有这些符号必须像{{}, {[}, {+}, {~}
所以我想知道:有没有简单/干净的方法来替换字符串?我不想使用大量string.replace("{","{{}");
string.replace("[","{[}")
这样做的正确方法是什么?
答案 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呼叫。