将参数输入参数传递给批处理文件

Posted

技术标签:

【中文标题】将参数输入参数传递给批处理文件【英文标题】:Passing parametric input parameter to batch file 【发布时间】:2016-07-03 15:18:42 【问题描述】:

这可能是一个简单的问题,但我没有找到任何线程,可能是我搜索错误。

我有一个简单的 bat 脚本并传递了一些参数。目前我正在根据那里的顺序得到论点。但我想让用户变得简单。

我当前的命令行看起来像:testBatch.bat setupip setupuser setuppass 我当前的批处理脚本如下所示:

set setupip=%1
set setupuser=%2
set setuppass=%3
echo I am doing some operation after this based on the input I got.

现在我想修改命令,使用户不必担心传递参数的顺序。基本上我想看到我的命令是这样的:testBatch.bat --ip setupip --user setupuser --password setuppass

我必须对批处理脚本进行哪些修改?

【问题讨论】:

Is there a way to pass parameters "by name" (and not by order) to a batch .bat file?的可能重复 【参考方案1】:

您正在寻找的东西称为“命名参数”。我找到了相同问题的链接here。

我喜欢该链接的答案如下:

set c=defaultC
set s=defaultS
set u=defaultU

:initial
if "%1"=="" goto done
echo              %1
set aux=%1
if "%aux:~0,1%"=="-" (
   set nome=%aux:~1,250%
) else (
   set "%nome%=%1"
   set nome=
)
shift
goto initial
:done

echo %c%
echo %s%
echo %u%

运行以下命令:

arguments.bat -c users -u products

将生成以下输出:

users
defaultS
products

【讨论】:

请勿仅发布链接答案。 从我引用答案的链接中添加了代码 sn-p。 @PetterFriberg【参考方案2】:

有一个批处理命令叫做shift,它基本上可以对你的参数变量进行左移。

所以作为脚本的开始,你需要一个循环

在该循环中,您使用 if 语句为选项的“动词”部分解码 %1

if 块内,您调用shift。然后旧的%2 变成新的%1,旧的%3 变成新的%2,等等

所以在 if 中,如果需要,您可以为动词选择第二个参数。然后再次拨打shift

循环直到你的参数为空。塔达!

【讨论】:

【参考方案3】:

试试这个:

@echo off


for %%a in (%*) do (
    call set "%%~1=%%~2"
    shift
)

echo :%--user%
echo :%--pass%

如果通过了,则调用如下:

namedArgs.bat --user user --pass pass

输出会是这样的:

:用户

:通过

这也将处理带空格的引用参数。

【讨论】:

如此简单有效!非常感谢

以上是关于将参数输入参数传递给批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将额外的额外参数传递给批处理文件?

如何将参数传递给批处理文件[重复]

将参数传递给参数

如何使用 ShellExecute 从 VBScript 将参数传递给批处理文件 [重复]

如何将参数传递给批处理文件?

将参数传递给windows计划任务