Batch file 使用批处理文件从2个不同的文件中相应地提取变量
我想相应地从两个不同的文件中提取变量 这意味着如果fileA具有这些值Batch file 使用批处理文件从2个不同的文件中相应地提取变量,batch-file,Batch File,我想相应地从两个不同的文件中提取变量 这意味着如果fileA具有这些值 FIRST SECOND THIRD 还有文件B A B C 结果应该是: FIRST, A SECOND, B THIRD, C 以下是我到目前为止编写的代码: for /f "tokens=*" %%a in (%FileA%) do ( for /f "tokens=*" %%i in (%FileB%) do ( echo %%i, %%a ) ) 但它不会正确匹配,这意味着: FIRST,
FIRST
SECOND
THIRD
还有文件B
A
B
C
结果应该是:
FIRST, A
SECOND, B
THIRD, C
以下是我到目前为止编写的代码:
for /f "tokens=*" %%a in (%FileA%) do (
for /f "tokens=*" %%i in (%FileB%) do (
echo %%i, %%a
)
)
但它不会正确匹配,这意味着:
FIRST, A
FIRST, B
FIRST, C
SECOND, A
SECOND, B
SECOND, C
THIRD, A
THIRD, B
THIRD, C
通过
for/F
循环读取一个文本文件和通过set/p
读取另一个文本文件时,可以同时读取两个文本文件,如下所示:
setlocal EnableDelayedExpansion
<“fileB.txt”(
对于/F“usebackq delims=“%%L in”(“fileA.txt”)do(
设置“行=“&set/P行=“”
回音(%%L,!行!
)
)
端部
要使上述代码正常工作,以下限制适用:
- 文本文件必须是ASCII/ANSI文本文件,而不是Unicode
- 文本文件必须包含Windows样式的换行符(回车加换行符)
- 文件
中的行长度不得超过8190字节/字符fileA.txt
- 文件
不能包含长度超过1021字节/字符的行fileB.txt
- 文本文件应包含相同的行数;实际上,
定义了从两个文件中读取的行数,因此如果包含更多的行,则可能忽略fileA.txt
,如果包含的行数少于fileB.txt
,则可能假定为空行fileA.txt
不应包含空行,因为/F忽略了空行fileA.txt
不应包含以fileA.txt
,因为由于默认的开头的行;
选项,eol
会忽略这些行for/F
不应包含fileA.txt
,因为这样可能会丢失或导致意外的结果,因为在扩展变量引用!
变量引用时,会启用延迟变量扩展,用于/F
%%L
要克服上述最后三个限制,可以使用以下代码:
setlocal DisableDelayedExpansion
<“fileB.txt”(
对于/F“delims=“%%L in('findstr/N“^”fileA.txt“)do(
设置“LINEA=%%L”
设置“LINEB=”&设置/P LINEB=“”
setlocal EnableDelayedExpansion
回声(!LINEA::=!,!LINEB!
端部
)
)
端部
以下是它的工作原理:
在每个匹配行之前都有一个行号和一个findstr/N
和搜索字符串:
匹配所有行,因此^
中的任何一行对于fileA.txt
不再显示为空,因此这些行不再被for/F
忽略for/F
- 所述行号前缀避免将
显示为第一个字符,因此以该字符开头的;
行不再被/F的fileA.txt
忽略
- 由于在扩展变量引用
的过程中不再启用延迟变量扩展,但仅在实际需要时启用,因此包含%L
的行不再是问题!
for/F
循环读取一个文本文件和通过set/p
读取另一个文本文件时,您可以同时读取两个文本文件,如下所示:
setlocal EnableDelayedExpansion
<“fileB.txt”(
对于/F“usebackq delims=“%%L in”(“fileA.txt”)do(
设置“行=“&set/P行=“”
回音(%%L,!行!
)
)
端部
要使上述代码正常工作,以下限制适用:
- 文本文件必须是ASCII/ANSI文本文件,而不是Unicode
- 文本文件必须包含Windows样式的换行符(回车加换行符)
- 文件
中的行长度不得超过8190字节/字符fileA.txt
- 文件
不能包含长度超过1021字节/字符的行fileB.txt
- 文本文件应包含相同的行数;实际上,
定义了从两个文件中读取的行数,因此如果包含更多的行,则可能忽略fileA.txt
,如果包含的行数少于fileB.txt
,则可能假定为空行fileA.txt
不应包含空行,因为/F忽略了空行fileA.txt
不应包含以fileA.txt
,因为由于默认的开头的行;
选项,eol
会忽略这些行for/F
不应包含fileA.txt
,因为这样可能会丢失或导致意外结果,因为在扩展变量引用!
变量引用时,会启用延迟变量扩展,以用于/F
%%L
要克服上述最后三个限制,可以使用以下代码:
setlocal DisableDelayedExpansion
<“fileB.txt”(
对于/F“delims=“%%L in('findstr/N“^”fileA.txt“)do(
设置“LINEA=%%L”
设置“LINEB=”&设置/P LINEB=“”
setlocal EnableDelayedExpansion
回声(!LINEA::=!,!LINEB!
端部
)
)
端部
以下是它的工作原理:
在每个匹配行之前都有一个行号和一个findstr/N
和搜索字符串:
匹配所有行,因此^
中的任何一行对于fileA.txt
不再显示为空,因此这些行不再被for/F
忽略for/F
- 所述行号前缀避免将
显示为第一个字符,因此以该字符开头的;
行不再被/F的fileA.txt
忽略
- 由于在扩展变量引用
的过程中不再启用延迟变量扩展,但仅在实际需要时启用,因此包含%L
的行不再是问题!