处理命令行参数的"最佳"方法是什么?
似乎对"最佳"方式有几个答案,因此我坚持如何处理如下简单的事情:
script.ps1 /n name /d domain
Run Code Online (Sandbox Code Playgroud)
和
script.ps1 /d domain /n name.
Run Code Online (Sandbox Code Playgroud)
有没有一个可以更好地处理这个问题的插件?我知道我在这里重新发明轮子.
显然我已经不是很漂亮而且肯定不是"最好的",但它确实有效..而且它是UGLY.
for ( $i = 0; $i -lt $args.count; $i++ ) {
if ($args[ $i ] -eq "/n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "-n"){ $strName=$args[ $i+1 ]}
if ($args[ $i ] -eq "/d"){ $strDomain=$args[ $i+1 ]}
if ($args[ $i ] -eq "-d"){ $strDomain=$args[ $i+1 ]}
}
Write-Host $strName
Write-Host $strDomain
Run Code Online (Sandbox Code Playgroud) 我在param脚本开头有了以下块
param(
[string]$command,
[string]$version = "1.1.0"
)
Run Code Online (Sandbox Code Playgroud)
这是好的,只是我需要$version给不成为一个位置参数,因此,如果您键入
.\script.ps1 run argument
Run Code Online (Sandbox Code Playgroud)
然后$args应该包含"参数",$version应该是"1.1.0".我知道我可以使用C#Cmdlet来实现它,但如果我能将它作为单个脚本提供,那将会更方便.
我很难想到这一点.如果我希望所有声明的参数在设置时需要显式命名,并且我想从$ args变量中取出未命名的任何内容,我该怎么做?
如果我的脚本声明了以下参数:
param($installdir, $compilemode, $whatever)
Run Code Online (Sandbox Code Playgroud)
然后传递一个文件列表(在这种情况下我不想指定安装目录,编译模式等)前三个参数会吞噬我的参数.所以,我想通过:
c:\> MyScript file-1.cs file-2.cs file-3.cs file-4.cs
Run Code Online (Sandbox Code Playgroud)
并获得所有4个字符串$ args,或者调用:
c:\> MyScript -CompileMode simple file-1.cs -InstallDir c:\temp file-2.cs
Run Code Online (Sandbox Code Playgroud)
使用包含2个文件的$ args获取$ compilemode和$ installdir的值...我该怎么做?