我想知道在运行批处理文件时是否可以使用我自己的命名参数。
例如,我有一个deploy.bat,我想从我的命令行调用它,如果我将使用双击或单用短划线无关紧要:
C:\> deploy.bat --user=admin --password=1234
这可能吗?
答案 0 :(得分:2)
批处理文件仅支持位置参数,并以%1
,%2
等方式进行处理。如果您想要手动解析字符串 - 可能,但不是一个简单的练习 - 您可以模拟这个,但它可能不值得努力。
PowerShell是一个更丰富的脚本环境,并且支持命名参数。
答案 1 :(得分:2)
这里有两种方式(其他方法也可以),假设参数与问题中的相同:
@echo off
:: mind that '=' will be taken as blank space when parsing arguments.
:: and `--user=admin` are two arguments.
:: 1) with for /l
setlocal enableDelayedExpansion
rem max count of the expected arguments
set max_count=10
for /l %%# in (1,2,%max_count%) do (
set /a next=%%#+1
set curr=%%#
call set "%%~!curr!=%%~!next!" 2>nul
)
echo %--user% -- %--password%
:::::::::::::::::
:: 2) processing the arguments line
setlocal enableDelayedExpansion
set "prev="
set "current="
for %%a in (%*) do (
set "current=%%~a"
if defined prev (
set "!prev!=%%~a"
set "prev="
) else (
set prev=%%a
)
)
echo %--user% -- %--password%
<强>说明:强>
通过这两种方式,我通过一个方式处理论证。此外,=
符号是cmd.exe的标准分隔符,它将作为空格进行威胁。
1)在第一种方法中,我使用FOR /L
循环处理所有参数(它的作用类似于c语法语言中的for循环),步骤2并且每一步我都有在延迟扩展下,我可以参数化参数的数量,并使其像call echo %%~!number!
一样,这允许我使用参数值对来设置变量。一个障碍是您不能以这种方式处理超过9个参数(或者您必须在循环中的某处添加shift
)
2)在第二个中我处理整个参数行。我有一个额外的变量prev
在每个偶数步骤被删除,在每个奇数步骤上它取当前参数的值在每个偶数步骤中,我都有参数值。