我有以下程序(print-args.exe):
#include <iostream>
int main(int argc, char** argv)
{
for( int i = 1; i < argc; ++i )
{
std::cout << "Arg " << i << ": " << argv[i] << std::endl;
}
return 0;
}
带点(。)的参数在某些情况下会分成两个参数:
PS C:\print-args> .\print-args.exe -text.txt /text.txt -path=c:\text.txt --foo=value.txt
Arg 1: -text
Arg 2: .txt
Arg 3: /text.txt
Arg 4: -path=c:\text.txt
Arg 5: --foo=value.txt
从cmd.exe运行时,参数是预期的:
C:\print-args>.\print-args.exe -text.txt /text.txt -path=c:\text.txt --foo=value.txt
Arg 1: -text.txt
Arg 2: /text.txt
Arg 3: -path=c:\text.txt
Arg 4: --foo=value.txt
论证的分裂发生在:
上述行为的原因是什么?
答案 0 :(得分:4)
在PowerShell中,参数解析-<alphachar>
是参数的名称。参数名称中不允许.
,因此PowerShell显然认为参数的参数的开头。如果您希望PowerShell使其解析使用--%
,例如:
.\print-args.exe --% -text.txt /text.txt -path=c:\text.txt --foo=value.txt
您可以在主题--%
中阅读about_parsing
。顺便说一句,我们在PSCX中有一个命令,只是为了调用echoargs.exe这种调试。 : - )