在很多情况下,我需要将参数传递给命令行exe。
在此站点上,我已经看到了许多这样的答案,但是到目前为止,我还没有看到关于Powershell如何处理参数的可靠的通用描述,两者都是通过cmd或start-process传递的。这是一个使我烦恼的琐碎示例:
这是 bat 脚本:
CD /D %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE
devenv /command "File.BatchNewTeamProject C:\stuff\Project51.xml"
我不了解的是Powershell如何解析这些参数。它认为什么是“参数”?
另外,规则对于启动过程是否与对cmd.exe相同?
最佳答案
试试这个来自PowerShell.com PowerTip的函数,它说明了Invoke-Expression
的用法。
function Call {
$command = $Args -join " "
$command += " 2>&1"
$result = Invoke-Expression($command)
$result |
%{$e=""}{ if( $_.WriteErrorStream ) {$e += $_ } else {$_} }{Write-Warning $e}
}
这给出了:
cd "${env:ProgramFiles(x86)}\Microsoft Visual Studio 10.0\Common7\IDE"
call .\devenv.exe /command "`"File.BatchNewTeamProject C:\stuff\Project51.xml`"
-编辑-
这里有很多话要说。
首先,您可以在“about”文件中找到很好的帮助try:
获取有关-*的帮助
您对以下主题感兴趣:
Get-help about_Quoting_Rules
Get-Help about_Special_Characters
Get-Help about_Escape_Characters
Get-Help about_Parameters
第二个
CD, DIR, MD
可以工作,但是它们只是CmdLets上的别名,它采用不同的参数。获取环境变量的第三个,不再是
%systemroot%
,而是$env:systemroot
。第四个以从powershell启动可执行文件,您只需键入exe的名称即可:
PS> notepad c:\temp\test.txt
命令行首先由powerShell解释,所以现在,如果您编写:
PS> "C:\Windows\System32\notepad.exe"
C:\Windows\System32\notepad.exe
它只是将其解释为字符串。因此,您可以使用&运算符并编写
PS> & "C:\Windows\System32\notepad.exe" c:\test.txt
它有效,但是:
PS> $a = "C:\Windows\System32\notepad.exe c:\test.txt"
PS> & $a
失败并
PS> $a = "C:\Windows\System32\notepad.exe c:\test.txt"
PS> Invoke-Expression $a
作品
关于.net - 将参数传递给exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5993677/