set / A命令用逗号扩展为多个var,只有set不扩展

时间:2016-04-20 13:35:37

标签: batch-file

(set /a "m1=1,m2=2")
for /f %%c in ("%m1%%m2%") do echo %%c
pause

除了由于for命令而导致的括号之外,还应该添加空格键。 for命令的回显是12.我使用数字字符来面对带有十进制表达式的set / A命令。 当我只使用一个Shell的集合尝试相同的过程时,也可以命名为m1,它可以没有逗号分隔。 使用set命令,m1表达式将为1 m2 2,而不是两个值,例如set / A SET。 有没有办法只使用set一次,而不仅仅是set / A?

2 个答案:

答案 0 :(得分:2)

我理解你想要的问题:

set x=1,y=2 

因此有两个变量(如set /a)。答案是不。 虽然您可以使用plain来表达槽表达式:

@echo off

for %%a in (
 "x=1" "a=5"
 "y=2" "b=6"
 "z=3" "c=7"
) do set "%%~a"

echo %x% %y% %z% %a% %b% %c%

请注意,项目周围的引号是必需的,因为=是分隔符。您可以将所有内容放在一线,并用作分隔符,;<space> 可能有很多变量,这可以让你免于一些写作......?

这可以像这样重写:

@echo off
set "vars=x=1,y=2,z=3,a=5,b=6,c=7"
for %%a in ("%vars:,=","%") do set "%%~a"

echo %x% %y% %z% %a% %b% %c%

因此您只需要更改vars值。

答案 1 :(得分:2)

正如其他答案和评论已经表明的那样,无法直接在一个命令中执行此操作,而是通过一个过程。下面的方法是最简单的方法:

@echo off

rem Define the several values
set "vars=m1=1,m2=2"

rem Do it:
set "%vars:,=" & set "%"

echo m1=%m1%
echo m2=%m2%

您可以删除@echo off命令并执行此程序以查看确切执行的内容......