获取循环外部循环中使用的变量值

时间:2013-04-23 21:33:24

标签: variables loops batch-file

我需要将'for'循环中的某些行(Myfile)的一部分放入两个单独的变量或者放入一个数组中。我的目标是使用彼此构成以下行的结果* .txt 。我写下你在下面看到的内容,但可见我的'a'变量只回显'C:\ Temp \ FR'(Myfile中行匹配标记的结尾)。

请问,有没有办法在变量/数组中获得所有匹配的标记?例如,在我的情况下,我需要从循环中获取'C:\ Temp \ USA'和'C:\ Temp \ FR'?感谢

   for /f "tokens=2 delims==" %%x in (Myfile) do (
   set a=%%x
  )
  echo %a%
  'MyFile
   DIR1= C:\Temp\USA
   DIR2= C:\Temp\FR
   result1.txt
   result2.txt

2 个答案:

答案 0 :(得分:0)

试试这个:

@echo off&setlocal

for /f "tokens=1* delims== " %%x in (Myfile) do (
    if /i "%%x"=="dir1" set "path1=%%y"
    if /i "%%x"=="dir2" set "path2=%%y"
)

echo %path1%
echo %path2%

输出是:

C:\Temp\USA
C:\Temp\FR

答案 1 :(得分:0)

有几种方法可以做到这一点。如果你想从文件的beginnng中读取几行,最简单的方法是直接在几个变量中读取它们:

< Myfile (
set /P var1=
set /P var2=
)

请注意,这些变量包含完整的行,因此必须在等号后提取部分。

在您的示例中,您只需要具有等号的行,因此我们可以在FOR命令中使用findstr "=" Myfile来处理它们。如果行数未定义,则必须按照建议将所有需要的行保存在数组中:

setlocal EnableDelayedExpansion
set n=0
for /F "tokens=2 delims==" %%a in ('findstr "=" Myfile') do (
   set /A n+=1
   set var[!n!]=%%a
)
rem Show all array elements
for /L %%i in (1,1,%n%) do (
   echo !var[%%i]!
)
rem Show just the second element
echo %var[2]%

但是,在您的特定情况下,您想要的行具有变量赋值的形式。这意味着如果使用SET命令执行这样的行,行中的值将“自动”保存:

for /F "delims=" %%a in ('findstr "=" Myfile') do set %%a

在之前的FOR之后,您可以直接获取DIR1DIR2个变量的值,例如:

echo %DIR1%
echo %DIR2%

此方法非常简单,不需要对正在加载的各个变量进行任何测试。

如果要在值中等号后删除空格,可以调整FOR选项来执行此操作:

for /F "tokens=1* delims== " %%a in ('findstr "=" Myfile) do set %%a=%%b