Batch file 运行批处理文件时是否可以拥有自己的命名参数?
我想知道在运行批处理文件时是否可以使用我自己的命名参数 例如,我有一个deploy.bat,我想从命令行调用它,比如,不管我是使用双破折号还是单破折号:Batch file 运行批处理文件时是否可以拥有自己的命名参数?,batch-file,Batch File,我想知道在运行批处理文件时是否可以使用我自己的命名参数 例如,我有一个deploy.bat,我想从命令行调用它,比如,不管我是使用双破折号还是单破折号: C:\> deploy.bat --user=admin --password=1234 这可能吗?批处理文件仅支持位置参数,并将其命名为%1、%2等。如果您想手动完成字符串解析练习(可能,但不是一个简单的练习),您可以对此进行模拟,但可能不值得这样做 PowerShell是一个更丰富的脚本编写环境,并且支持命名参数。批处理文件仅支持位
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-检查我的编辑。全部清除。非常感谢。对于上面的链接重复问题,请特别注意,因为它提供了一个比较优雅的解决方案。对于上面的链接重复问题,请特别注意,因为它提供了一个比较优雅的解决方案。