Batch file 在批处理文件中传递参数

Batch file 在批处理文件中传递参数,batch-file,command-line-arguments,Batch File,Command Line Arguments,已经看到将参数传递给批处理文件,如 filename.bat argument1 argument2 但我想通过类似的考试 filename.bat用户名=argument1密码=argument2 由于我不想依赖于任何顺序,用户可以先传递密码,然后传递用户名。我认为您无法以随机顺序传递参数,因为它们不是由参数名称标识的,而是由%0-%9标识的 看 如前所述,在调用批处理文件时,您最多可以使用tp 9参数。请看这里: 虽然这是面向使用格式/username argument1的,但是适应user

已经看到将参数传递给批处理文件,如

filename.bat argument1 argument2

但我想通过类似的考试 filename.bat用户名=argument1密码=argument2


由于我不想依赖于任何顺序,用户可以先传递密码,然后传递用户名。

我认为您无法以随机顺序传递参数,因为它们不是由参数名称标识的,而是由%0-%9标识的

如前所述,在调用批处理文件时,您最多可以使用tp 9参数。

请看这里:

虽然这是面向使用格式
/username argument1
的,但是适应
username=argument1
相对容易,但是
=
在“a”参数内传递时存在问题-它被视为分隔符,因此接收例程将看到两个参数,但它们是成对的(用户名和参数1。)

这完全取决于您希望如何处理数据。如果您愿意,可以传递参数
“quoted”
,以克服
=是分隔符的问题,然后使用

 for /f "tokens=1,*delims==" %%a in ("%~1") do set "%%a=%%b"
但记住引用可能是一个绊脚石


注意:使用我所指的过程不受参数计数的限制。

您可以通过使用用户名=和密码=来实现这一点,因为用户名=和密码=都是9个字符长

比如说

set temp=%0
set temp=%temp:~0,9% 
if %temp%=="username=" (
  set tmpUser=%0
  set username=%tmpUser:~9%
  set tmpPass=%1
  set password=%tmpPass:~9%
)
if %temp%=="password=" (
  set tmpPass=%0
  set password=%tmpPass:~9%
  set tmpUser=%1
  set username=%tmpUser:~9%
)

这是可能的,请看一看。但是,在某些脚本语言中实现相同的功能要容易得多,例如VBS。这与您的要求不完全一样,但您应该看一看,您可以通过这样做来分解参数maybee:%0“密码”字符串,以识别接下来的内容%1“%2”用户用于标识下一个参数是用户名%3的字符串“”子字符串语法仅适用于变量,而不适用于
%1