将参数化输入参数传递给批处理文件
Passing parametric input parameter to batch file
这可能是一个简单的问题,但我没有找到任何主题,可能是我搜索错误。
我有一个简单的 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
我的批处理脚本需要做哪些修改?
您要找的东西叫做 'Named Arguments'。对于同一个问题 here,我找到了 link。
我喜欢link的答案如下:
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
有一个名为 shift
的批处理命令,它基本上可以对您的参数变量进行左移。
因此作为脚本的开始,您需要一个循环
在该循环中,您使用 if
语句
为选项的 'verb' 部分解码 %1
在 if
块内,您调用 shift
。然后旧的 %2
变成新的 %1
,旧的 %3
变成新的 %2
,等等
所以在 if 里面,如果需要的话,你可以为动词选择一个次要参数。然后再次调用shift
。
循环直到你的参数为空。塔达!
试试这个:
@echo off
for %%a in (%*) do (
call set "%%~1=%%~2"
shift
)
echo :%--user%
echo :%--pass%
如果传递的是这样调用的:
namedArgs.bat --user user --pass pass
输出如下:
:user
:pass
这还将处理带空格的引用参数。
这可能是一个简单的问题,但我没有找到任何主题,可能是我搜索错误。
我有一个简单的 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
我的批处理脚本需要做哪些修改?
您要找的东西叫做 'Named Arguments'。对于同一个问题 here,我找到了 link。
我喜欢link的答案如下:
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
有一个名为 shift
的批处理命令,它基本上可以对您的参数变量进行左移。
因此作为脚本的开始,您需要一个循环
在该循环中,您使用 if
语句
在 if
块内,您调用 shift
。然后旧的 %2
变成新的 %1
,旧的 %3
变成新的 %2
,等等
所以在 if 里面,如果需要的话,你可以为动词选择一个次要参数。然后再次调用shift
。
循环直到你的参数为空。塔达!
试试这个:
@echo off
for %%a in (%*) do (
call set "%%~1=%%~2"
shift
)
echo :%--user%
echo :%--pass%
如果传递的是这样调用的:
namedArgs.bat --user user --pass pass
输出如下:
:user
:pass
这还将处理带空格的引用参数。