我需要将'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 :(得分: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之后,您可以直接获取DIR1
或DIR2
个变量的值,例如:
echo %DIR1%
echo %DIR2%
此方法非常简单,不需要对正在加载的各个变量进行任何测试。
如果要在值中等号后删除空格,可以调整FOR选项来执行此操作:
for /F "tokens=1* delims== " %%a in ('findstr "=" Myfile) do set %%a=%%b