比较文件1和文件2的内容并输出结果

时间:2019-08-23 05:20:56

标签: batch-file

file1检索file2的字符串的批处理文件

file1.txt

aaa.dll
ccc.dll
ddd.sys

file2.txt

aaa.dll=c:\windows\aaa.dll
bbb.dll=c:\windows\bbb.dll
ccc.dll=c:\windows\system32\ccc.dll
ddd.sys=c:\windows\system32\drivers\ddd.sys
eee.log=c:\windows\debug\wia\eee.log

预期结果

c:\windows\aaa.dll
c:\windows\system32\ccc.dll
c:\windows\system32\drivers\ddd.sys

测试命令

for /f "tokrns=*" %%i ('findstr file1.txt file2.txt') do (set result=%%i)

2 个答案:

答案 0 :(得分:0)

我假设file2.txt本质上是“配置设置”列表...即名称- value 对的列表。此外,file1.txt是要获取其名称的列表。

在这种情况下,您需要为findstr中的每行行运行file1.txt命令。例如:

getvalues.bat

@echo off
setlocal
set "REQUIRED=file1.txt"
set "SETTINGS=file2.txt"

for /f "usebackq tokens=*" %%a in ( "%REQUIRED%" ) do (
    for /f "tokens=1,* delims==" %%b in ( 'findstr /b "%%a=" "%SETTINGS%"' ) do (
        echo %%c
    )
)

产生以下内容:

C:\>getvalues.bat
c:\windows\aaa.dll
c:\windows\system32\ccc.dll
c:\windows\system32\drivers\ddd.sys

注释

  • 我已经硬编码了REQUIRED名称列表以获取 values 的名称)和SETTINGS(该列表名称-对)。根据您的要求,您可以从命令行中选择一个或多个。

  • 第一个循环遍历REQUIRED(= file1.txt)中的所有行。之所以使用usebackq是因为文件名用双引号引起来,以防万一它包含空格。

  • 对于第一个循环(%%a)中的每个名称,我们运行一个findstr命令。 /b告诉它在行的开头查找模式。我还要在 name 的末尾附加一个=。两者都有助于防止意外的部分匹配。

  • tokens=1,* delims==在第一个(或唯一的)等号处分割findstr的输出。名称(在=之前)将分配给%%b,值(所有其余值)将被分配到%%c

答案 1 :(得分:0)

您不需要比较任何东西即可获取先前已定义的字符串(即变量值):

@echo off
setlocal EnableDelayedExpansion

rem Define the strings from file2.txt
for /F "delims=" %%a in (file2.txt) do set "%%a"

rem Retrieve the strings indicated in file1.txt
for /F %%a in (file1.txt) do echo !%%a!

如果您坚持使用“查找字符串”方式:

for /F "tokens=2 delims==" %%a in ('findstr /G:file1.txt file2.txt') do echo %%a