【问题标题】:How to escape command line arguments on PowerShell?如何在 PowerShell 上转义命令行参数?
【发布时间】:2010-10-01 09:33:40
【问题描述】:

看来我可以使用单引号或双引号转义命令行参数:

PS C:\> echo Hello World
Hello
World
PS C:\> echo 'Hello World'
Hello World
PS C:\> echo "Hello World"
Hello World

但我仍然无法弄清楚,那就是当您希望从包含空格的目录中运行可执行文件时:

PS C:\> c:\program files\test.exe
The term 'c:\program' is not recognized as a cmdlet, function, operable program, or script file. Verify the term and try again.
At line:1 char:11
+ c:\program  <<<< files\test.exe
PS C:\> 'c:\program files\test.exe'
c:\program files\test.exe
PS C:\> "c:\program files\test.exe"
c:\program files\test.exe
PS C:\>

如何让 PowerShell 运行上面的可执行文件?

【问题讨论】:

标签: powershell


【解决方案1】:

尝试在命令前加一个 & 号。例如

& 'C:\Program Files\winscp\winscp.exe'

【讨论】:

  • 这是更正确的答案,因为它只是告诉解析器在命令模式下解释下一个标记,尽管它看起来像一个字符串。
【解决方案2】:

使用这个:

. "c:\program files\test.exe"

实际上更好的解决方案是:

Invoke-Item "c:\program files\test.exe"

或使用别名:

ii "c:\program files\test.exe"

使用 Invoke-Item 意味着将使用正确的 Windows 文件处理程序。所以对于一个 EXE 文件,它会运行它。例如,对于 .doc 文件,它将在 Microsoft Word 中打开。

这是最方便的 PowerShell 命令行之一。试试看:

ii .

【讨论】:

  • Invoke-Expression 确实存在与其使用相关的安全问题,但我不知道 Invoke-Item 存在问题。你能详细说明一下吗?
  • 如果您尝试调用可执行文件,您可能希望使用&amp; 而不是.. 调用运算符实际上是为了在当前上下文中包含其他 PowerShell 脚本。见Get-Help about_Operators
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2011-01-10
  • 2011-07-27
  • 2013-03-24
  • 2019-08-05
相关资源
最近更新 更多