我需要创建一个 Windows 批处理脚本,在其中传递一些命令行参数。这些参数可能以任何顺序出现,但脚本应该根据参数名称正确选择它们。例如:
<scriptname> -age <agevalue> -gender <gender>
<scriptname> -gender <gender> -age <agevalue>
脚本可以通过上述两种方式调用,但应正确选择年龄和性别并将其分配给变量。可以通过参数前的开关来识别参数 - 即 -age、-gender 等。
有人可以给我一个内部识别这一点的例子吗?
答案1
不幸的是,批处理没有getops
像这样的内置函数狂欢确实如此。但是,你可以实现你自己的穷人版本:
:GETOPTS
if /I %~1 == --age set AGE=%2& shift
if /I %~1 == --gender set GENDER=%2& shift
shift
if not (%1)==() goto GETOPTS
答案2
你能用 Powershell 来做吗?还是需要批处理?Powershell 让这一切变得简单而方便,你只需要在脚本顶部添加类似这样的内容,然后就可以按任意顺序调用每个参数
param (
[string]$Age,
[string]$Gender
)
您可以使用批处理来完成此操作,但这需要进行大量的参数检查。以下是一些可以执行此操作的批处理脚本的链接
http://www.ericphelps.com/batch/samples/arguments.bat.txt
(可能有重复)
https://stackoverflow.com/questions/5215729/是否有一种方式可以通过名称而不是顺序将参数传递给a-batch-bat-f