2013-04-23 2 views
0

Мне нужно получить часть некоторых строк (Myfile) из цикла 'for' либо в две отдельные переменные, либо в массив. Моя цель - использовать каждый другой для формирования пути из следующих строк: результат * .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

0

Есть несколько способов сделать это. Если вы хотите прочитать несколько строк из beginnng файла, самый простой способ, чтобы непосредственно читать их в паре переменных:

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

Обратите внимание, что эти переменные содержат полные строки, поэтому необходимо, чтобы извлечь часть после знака равенства.

В вашем примере вам просто нужны строки с одинаковым знаком, поэтому мы можем использовать findstr "=" Myfile в команде FOR, чтобы просто обработать их. Если количество строк не определен, вы должны сохранить все нужные строки в массиве как Вы предложили:

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, вы можете непосредственно получить значения из DIR1 или DIR2 переменных, например:

echo %DIR1% 
echo %DIR2% 

Этот метод очень прост и не требует тестирования на отдельные загружаемые переменные.

Если вы хотите удалить пробел после знака равенства в значении, вы можете настроить для вариантов сделать так:

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