Windows Batch:从FOR循环内部访问变量

时间:2014-04-06 13:22:00

标签: windows batch-file

我试图在DOS批次中做这个相当基本的事情:

@echo off
set _sets=^
RO:111:Rondonia,^
AC:112:Acre,^
AM:113:Amazonas,^
RR:114:Roraima
set _family_name=MyFamily
FOR %%i IN (%_sets%) DO (
    echo %%i ----- %_family_name%
)

输出:

RO:111:Rondonia -----
AC:112:Acre -----
AM:113:Amazonas -----
RR:114:Roraima -----

-----应该出现" MyFamily",但没有出现。

如何从内部访问FOR循环外设置的变量?我不知道为什么_family_name变量在for循环中不可见。我对批处理脚本有些新意。我习惯于C ++和Java编程,因此我的想法很可能不适用于批处理领域。

我还需要拆分字符串三元组" AA:NNN:AAAAAA"分为三个独立变量。我试图想出一个嵌套的for循环,但我无法解决这个问题。

为清楚起见,这个例子很简单。实际批处理比这更复杂。我必须从循环内访问10-12个变量。所以请在回答之前考虑这个方面。提前谢谢。

2 个答案:

答案 0 :(得分:2)

如果_family_name实际上是在另一个(外部)循环中设置的,则需要使用以下内容启用延迟扩展:

@echo off
setlocal enabledelayedexpansion

for ...
  set foo=bar
  for ...
    echo !foo!
  )
)

请注意,您使用!exclamations!而不是%percents%访问变量。

答案 1 :(得分:1)

看看这是否对您有所帮助:

FOR /f %%a "tokens=1-4 delims=," IN ("%_sets%") DO (
    echo %%a ----- %_family_name%
    echo %%b ----- %_family_name%
    echo %%c ----- %_family_name%
    echo %%d ----- %_family_name%
)