CMD非批处理环境下嵌套FOR循环实现外层迭代触发内层全迭代的方法
CMD嵌套FOR循环实现遍历所有组合的正确方法
你的问题出在误用了FOR /F命令:FOR /F默认是按行读取文本并解析,当你用IN ("A B")时,引号内的内容会被当作单一文本行,默认只取第一个空格分隔的token(也就是"A"),所以外层循环只执行一次;加tokens=*则会把整行(包括空格)作为一个变量,自然得不到拆分后的结果。
正确实现方式:使用普通FOR循环(不带/F)
普通FOR命令会自动按空格、制表符等分隔符拆分字符串列表,完全符合你的需求,命令如下:
FOR %a IN (A B) DO (FOR %b IN (1 2) DO (echo %a%b))
执行后会输出:
A1 A2 B1 B2
如果一定要用FOR /F的实现方式
需要手动指定分隔符和tokens来拆分字符串,不过写法更繁琐:
FOR /F "tokens=1,2 delims= " %a IN ("A B") DO ( FOR /F "tokens=1,2 delims= " %x IN ("1 2") DO ( echo %a%x echo %a%y echo %b%x echo %b%y ) )
这种方式需要明确指定每个token对应的变量(%a、%b对应外层的A、B;%x、%y对应内层的1、2),不如普通FOR简洁直观。
内容的提问来源于stack exchange,提问作者skeetastax
相关产品推荐
相关产品推荐

