将命令行参数传递给Windows批处理脚本


10

我需要创建Windows批处理脚本,并在其中传递一些命令行参数。这些参数可以以任何顺序出现,但是脚本应根据参数名称正确选择它们。例如:

<scriptname> -age <agevalue> -gender <gender>
<scriptname> -gender <gender> -age <agevalue>

可以通过上述两种方式中的任何一种来调用该脚本,但是应该正确地选择年龄和性别并将其分配给变量。参数可以通过它们前面的开关来标识-即-age,-gender等。

有人可以给我一个在内部进行识别的示例吗?

Answers:


10

不幸的是,批处理没有那样的内置getops函数。但是,您可以实现自己的穷人变体:

:GETOPTS
 if /I %~1 == --age set AGE=%2& shift
 if /I %~1 == --gender set GENDER=%2& shift
 shift
if not (%1)==() goto GETOPTS

这可能会很麻烦,因为参数数量超出了限制,但符合要求。谢谢
Dhiwakar Ravikumar 2014年

1
robvanderwoude.com/if.php之后,最好编写if /I "%~1" == "--age" ... (注意波浪号)。这也适用于空参数或用双引号引起来的参数。
Axel Kemper 2014年

您可能要添加双引号。否则,该语句不适用于空参数%1。
Axel Kemper 2014年

如果您的各种可能的参数具有固定的格式或类型,例如年龄(为数字)和性别(为“ M”或“ F”),则不必定义参数,而应使用比较识别将其分配给脚本中的适当变量。我这样做是为了在我的第一个IT工作中在9x和XP之间的过渡期间编写的早期批处理脚本。该脚本可以接受OS类型的参数,脚本运行所在的驱动器以及其他一些东西,或者可以自动检测适当的设置。有点矫kill过正,但很有趣。
music2myear 2014年

8

您可以使用Powershell吗?还是需要批量处理?Powershell使它变得简单易用,您只需要在脚本顶部添加这样的内容,然后就可以按任意顺序调用每个参数

param (
[string]$Age,
[string]$Gender
)

您可以使用批处理来执行此操作,但是它需要进行大量参数检查。这是一些执行此操作的批处理脚本的一些链接

http://www.ericphelps.com/batch/samples/arguments.bat.txt

(可能重复)

/programming/5215729/is-there-a-way-to-pass-parameters-by-name-and-not-by-order-to-a-batch-bat-f


1
它必须仅是批处理脚本:(。我们严格要求它是批处理脚本。尽管非常感谢:)
Dhiwakar Ravikumar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.