.net - 将参数传递给exe

标签 .net powershell batch-file

在很多情况下,我需要将参数传递给命令行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/

相关文章:

c# - TPL 数据流和控制台应用程序不会终止应用程序

windows - 批处理脚本条件下的 PowerShell 命令

powershell - 空暂存槽的 Azure 诊断扩展冲突错误 (Azure SDK 2.6)

python - 在 Windows 中使用 python 安装字体

windows - 使用 Windows/DOS shell/批处理命令,如何获取文件并只保留唯一行?

.net - 运算符之间的整体匹配

.net - 从托管代码执行CPU/GPU指令

powershell - 复制一个单独的文件及其父文件夹/完整路径

windows - 如何让用户的Windows版本低于Windows 8时程序退出?

c# - VS2015 压缩元数据流中的非法表