批处理文件中的参数传递

3

我看过像这样向批处理文件传递参数的内容:

filename.bat argument1 argument2 ..

但我想要传递类似于 filename.bat username=argument1 password=argument2 的内容。

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


这是可能的,请看这篇文章:http://www.codeproject.com/Questions/176497/DOS-Batch-how-to-parse-command-line-in-DOS-batch-f。但是,用一些脚本语言实现相同的功能要容易得多,比如VBScript。 - Thangadurai
1
不完全是你所要求的,但你应该看一下https://dev59.com/Z2865IYBdhLWcg3wIa7M#8162578 - dbenham
3个回答

2
看这里:处理开关 虽然这是面向使用格式/username argument1的,但相对容易适应username=argument1,但是当在“a”参数中传递=时会有问题 - 它被视为分隔符,因此接收例程将看到两个参数,但它们将成对出现(用户名和参数1)。
实际上取决于您如何处理数据。如果愿意,可以传递参数"quoted"来解决=是分隔符的问题,然后使用
 for /f "tokens=1,*delims==" %%a in ("%~1") do set "%%a=%%b"

但是记得使用引号可能会成为一个绊脚石。

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


0

你可以使用变量子字符串来实现这个目标,因为用户名(username=)和密码(password=)都是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%
)

子字符串语法仅适用于变量,而不适用于参数,如%1 - jeb

0

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

请参见http://www.robvanderwoude.com/parameters.php

正如在此提到的那样,在调用批处理文件时,您最多可以使用9个参数。


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - DTH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接