我正在尝试实现基于这一讨论的宏替换。基本上,这是可行的,但ExpandString似乎有一些限制:
main.ps1:
$foo = 'foo'
$text = [IO.File]::ReadAllText('in.config')
$ExecutionContext.InvokeCommand.ExpandString($text) | out-file 'out.config'in.config (确定):
$fooin.config (错误:“处理字符串令牌时遇到行尾”):
"in.config (错误:字符串末尾的“缺失”):
'这些文件指出:
返回值:使用所有变量和表达式替换完成的扩展字符串。
什么是“表达式替代”(也许这就是我的情况)?
有什么解决办法吗?
发布于 2009-03-26 17:42:21
出现此错误是因为引号(单引号和双引号)是PowerShell运行时的特殊字符。它们表示字符串,如果要将它们用作该字符,则需要转义。
一种可能的解决方法是使用反勾号转义引号,这取决于您想要的结果。
例如,如果我的文本文件
'$foo' 该字符串的结果扩展将是
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
$foo如果您希望展开该变量,则需要转义这些引号。
`'$foo`'
PS>$text = [io.file]::ReadAllText('test.config')
PS>$ExecutionContext.InvokeCommand.ExpandString($text)
'foo'或者,如果您要有一个未配对的单引号或双引号,您将需要摆脱它。
您可以在字符串上执行一个-replace来转义这些字符,但您必须确保这是所有需要的效果。
PS>$single, $double = "'", '"'
PS>$text = [io.file]::ReadAllText('test.config') -replace "($single|$double)", '`$1'
PS>$ExecutionContext.InvokeCommand.ExpandString($text)注意:在执行ExpandString调用之后,就不会再有后排了。
https://stackoverflow.com/questions/686357
复制相似问题