Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 运行批处理文件时是否可以拥有自己的命名参数?_Batch File - Fatal编程技术网

Batch file 运行批处理文件时是否可以拥有自己的命名参数?

Batch file 运行批处理文件时是否可以拥有自己的命名参数?,batch-file,Batch File,我想知道在运行批处理文件时是否可以使用我自己的命名参数 例如,我有一个deploy.bat,我想从命令行调用它,比如,不管我是使用双破折号还是单破折号: C:\> deploy.bat --user=admin --password=1234 这可能吗?批处理文件仅支持位置参数,并将其命名为%1、%2等。如果您想手动完成字符串解析练习(可能,但不是一个简单的练习),您可以对此进行模拟,但可能不值得这样做 PowerShell是一个更丰富的脚本编写环境,并且支持命名参数。批处理文件仅支持位

我想知道在运行批处理文件时是否可以使用我自己的命名参数

例如,我有一个deploy.bat,我想从命令行调用它,比如,不管我是使用双破折号还是单破折号:

C:\> deploy.bat --user=admin --password=1234

这可能吗?

批处理文件仅支持位置参数,并将其命名为%1、%2等。如果您想手动完成字符串解析练习(可能,但不是一个简单的练习),您可以对此进行模拟,但可能不值得这样做


PowerShell是一个更丰富的脚本编写环境,并且支持命名参数。

批处理文件仅支持位置参数,并将其寻址为%1、%2等。如果您希望手动完成字符串解析练习(可能,但不是一个简单的练习),您可以模拟此操作,但这可能不值得努力


PowerShell是一个更丰富的脚本编写环境,并且确实支持命名参数。

假设参数与问题中的参数相同,这里还有两种其他方法:

@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循环处理所有参数,它在第2步中的行为类似于c语法语言中的FOR循环,在每一步中,我都有下一个数字。在延迟扩展下,我可以参数化参数的数量,并像调用echo%%~!数字这允许我使用参数-值耦合来设置变量。一个障碍是,您不能以这种方式处理超过9个参数,否则必须在循环中的某个位置添加移位


2在第二个步骤中,我处理整个参数行。我有一个附加变量prev,在每个偶数步骤中删除,在每个奇数步骤中它取当前参数的值。因此在每个偶数步骤中,我有参数-值耦合。

这里有两种方法也可以使用其他方法,假设论点与问题相同:

@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循环处理所有参数,它在第2步中的行为类似于c语法语言中的FOR循环,在每一步中,我都有下一个数字。在延迟扩展下,我可以参数化参数的数量,并像调用echo%%~!数字这允许我使用参数-值耦合来设置变量。一个障碍是,您不能以这种方式处理超过9个参数,否则必须在循环中的某个位置添加移位


2在第二个步骤中,我处理整个参数行。我有一个额外的变量prev,它在每个偶数步上被删除,在每个奇数步上,它取当前参数的值。所以在每个偶数步上,我都有参数值对。

。非常感谢你。这确实起到了作用。我能解释一下上面的解决方案吗?@Panagiotis-检查我的编辑。全部清除。非常感谢,太棒了。非常感谢你。这确实起到了作用。我能解释一下上面的解决方案吗?@Panagiotis-检查我的编辑。全部清除。非常感谢。对于上面的链接重复问题,请特别注意,因为它提供了一个比较优雅的解决方案。对于上面的链接重复问题,请特别注意,因为它提供了一个比较优雅的解决方案。