【发布时间】:2014-02-18 15:11:27
【问题描述】:
我的 Powershell 脚本需要使用一组非常复杂的参数调用 EXE。我正在使用 Powershell 3.0,并且必须坚持使用该版本。唉,即使是“魔法”转义运算符 (--%) 也没有帮助我。例如,使用 Call 运算符,考虑如下:
& other.exe --% action /mode fast /path:"location with spaces" /fancyparam { /dothis /dothat:"arg with spaces" } /verbose
现在,如果就这么简单,我的脚本可以很容易地正常工作。但这并不是那么简单。 “other.exe”的参数可能不同,这取决于我脚本前面的用户选择。所以相反,我需要提前建立这些参数,可能是这样的:
$commandArgs = 'action /mode ' + $userMode + ' /path:"location with spaces" /fancyparam { /dothis /dothat:"' + $userArgs + " } /verbose'
因此我会这样调用:
& other.exe --% $commandArgs
...好吧,期望--% 意味着它只是传递$commandArgs 的原始字符串。但是如果没有--%,powershell 会自动引用 $commandArgs 的内容,这确实会弄乱内部引号(更不用说打破 other.exe 首先需要的前面的 'action' 参数)。换句话说,我已经尝试将--% 嵌入到我的 $commandArgs 字符串中,但是在它被解析的时候已经造成了损坏(我认为它甚至不会那样工作)。
请注意,这个示例只占我需要执行的实际命令的 1/4 左右——其中包括更多的用户参数、引号和其他有趣的字符,这些字符会让我匆忙逃离地狱!我也已经在使用 echoargs.exe 工具,这就是我看到我遇到的麻烦的方式。哦,我也需要示例中的所有空格(即大括号字符周围需要空格)。
所以在寻找答案之后,我向你寻求帮助。提前致谢。
【问题讨论】:
标签: powershell parameters escaping call operator-keyword