使用powershell,您可以使用'&'字符运行另一个应用程序并传入参数.
一个简单的例子.
$notepad = 'notepad'
$fileName = 'HelloWorld.txt'
# This will open HelloWorld.txt
& $notepad $fileName
Run Code Online (Sandbox Code Playgroud)
这很好.但是,如果我想使用业务逻辑来动态生成命令字符串呢?使用相同的简单示例:
$commandString = @('notepad', 'HelloWorld.txt') -join ' ';
& $commandString
Run Code Online (Sandbox Code Playgroud)
我收到错误:
术语"记事本HelloWorld.txt"未被识别为cmdlet,函数,脚本文件或可操作程序的名称.检查名称的拼写,或者如果包含路径,请验证路径是否正确,然后重试.
在我的实例中,我试图动态添加或删除最终命令行字符串的选项.我有办法解决这个问题吗?
Joe*_*ant 36
两种方法:
将exe与参数分开.为参数执行所有动态内容,但是在后面持有参数的变量中调用exe正常:
$argument= '"D:\spaced path\HelloWorld.txt"'
$exe = 'notepad'
&$exe $argument
#or
notepad $argument
Run Code Online (Sandbox Code Playgroud)
如果你有多个参数,你应该把它作为一个数组,如果它将与调用的exe部分分开:
$arguments = '"D:\spaced path\HelloWorld.txt"','--switch1','--switch2'
$exe = 'notepad'
&$exe $arguments
Run Code Online (Sandbox Code Playgroud)
使用Invoke-Expression.如果所有内容都必须在字符串中,则可以像调用普通表达式一样调用字符串.Invoke-Expression
也有别名iex
.
$exp = 'notepad "D:\spaced path\HelloWorld.txt"'
Invoke-Expression $exp
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,参数和exe的内容都应该被引用和格式化,就好像它是直接写在命令行上一样.
如果你想保持构建字符串的逻辑:
$commandString = @('notepad', 'HelloWorld.txt') -join ' '
&([scriptblock]::create($commandstring))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29593 次 |
最近记录: |