为什么PowerShell在某些情况下在点处拆分参数

为什么PowerShell在某些情况下在点处拆分参数,powershell,Powershell,我有以下程序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; } 从cmd.exe运行时,参数与预

我有以下程序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;
}
从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
参数拆分发生在以下情况:

参数的开头正好是一个减号- 参数包含一个或多个点 参数不包含冒号:在第一个点之前
出现上述行为的原因是什么?

在PowerShell参数解析中-仅针对这种称为echoargs.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
.\print-args.exe --% -text.txt /text.txt -path=c:\text.txt --foo=value.txt