2013-04-23 124 views
0

我需要将'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 

回答

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 
+0

这是正确的!非常感谢你。 – new 2013-04-23 22:10:48

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 /F "tokens=1* delims== " %%a in ('findstr "=" Myfile) do set %%a=%%b