当前位置: 首页 > 知识库问答 >
问题:

PowerShell命令行参数和“--”

澹台鸿光
2023-03-14

无论出于什么原因,当我试图调用我正在编写的C#程序时,我试图在命令行中用“--”传递两个参数,PowerShell不会用我的命令行调用该程序。

例如,我提供命令行:

.\abc.exe foo.txt -- bar --
foo.txt bar --
foo.txt -- bar --

为什么会这样?

顺便说一句,如果我把它叫做:

.\abc.exe foo.txt '--' bar '--'

它像预期的那样工作。

& .\abc.exe foo.txt -- bar --

似乎没有帮助。

我之所以认为这是PowerShell的怪异之处,是因为如果我从cmd.exe运行相同的命令行,一切都会像预期的那样工作。

共有1个答案

颛孙哲
2023-03-14

双连字符指示PowerShell将后面的所有内容视为文字参数而不是选项,这样您就可以向脚本/application/cmdlet传递一个文字-foo

示例:

PS C:\> echo "-bar" | select-string -bar
Select-String : A parameter cannot be found that matches parameter name 'bar'.
At line:1 char:28
+ "-bar" | select-string -bar <<<<
    + CategoryInfo          : InvalidArgument: (:) [Select-String], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SelectStringCommand

vs.

PS C:\> echo "-bar" | select-string -- -bar

-bar

若要避免此行为,必须引用(“--”'--')或转义(`--)双连字符。

 类似资料:
  • 这是我得到的问题“编写一个程序来读取和显示2个命令行参数和命令行参数数组的长度”。 这是我用Java给出的答案。。这是正确的吗?

  • 为了方便起见,我们支持在运行 Blade 应用的时候修改一些配置,比如我在运行时指定端口: java -jar blade-app.jar --server.port=9088 当然还支持一些其他的命令行参数,看看下面的表格: 命令行参数 描述 示例 server.address 服务地址,默认是本机 0.0.0.0 回环地址 --server.address=192.168.1.100 serv

  • 1.2. 命令行参数 大多数的程序都是处理输入,产生输出;这也正是“计算”的定义。但是, 程序如何获取要处理的输入数据呢?一些程序生成自己的数据,但通常情况下,输入来自于程序外部:文件、网络连接、其它程序的输出、敲键盘的用户、命令行参数或其它类似输入源。下面几个例子会讨论其中几个输入源,首先是命令行参数。 os包以跨平台的方式,提供了一些与操作系统交互的函数和变量。程序的命令行参数可从os包的Ar

  • '-m' 选项 显示所有编译的模块,自1.4.0以来,Tengine支持动态模块,static表示静态编译,shared表示动态编译(后面接的是动态模块的版本)。下面是例子: $ nginx -m Tengine version: Tengine/1.4.1 (nginx/1.2.3) loaded modules: ngx_core_module (static) ng

  • V2Ray V2Ray 的程序文件的命令行参数如下: v2ray [-version] [-test] [-config=config.json] [-format=json] -version 只输出当前版本然后退出,不运行 V2Ray 主程序。 -test 测试配置文件有效性,如果有问题则输出错误信息,不运行 V2Ray 主程序。 -config 配置文件路径,可选的形式如下: 本地路径,可

  • 所有标志都是可选的,但是有些必须跟指定标志组合使用才生效。 标志 默认 描述 示例 --shell null 进入 REPL 模式 --allow-cors false 打开 CORS 兼容模式,这将允许从托管在任何域中的网站内连接到 Appium 服务器。启用此功能时要小心,因为如果您访问的网站使用跨域请求,在 Appium 服务器上启动或运行内省会话,则可能存在安全风险。 --ipa null