Windows Batch - 在一个字符串中查找匹配另一个字符串中的单词并捕获输出的单词

时间:2017-10-01 08:40:14

标签: windows batch-file

虽然这对某些人来说似乎很容易,但我已经挣了好几个小时。

我有一个文件:

MYFOLDER,JobE,JobD_ENDED_OK,
MYFOLDER,JobD,JobC_ENDED_OK,JobD_ENDED_OK
MYFOLDER,JobD,JobB_ENDED_OK,
MYFOLDER,JobC,JobA_ENDED_OK,JobC_ENDED_OK
MYFOLDER,JobB,JobA_ENDED_OK,JobB_ENDED_OK
MYFOLDER,JobA,,JobA_ENDED_OK

我需要遍历并找到一行中的标记4与另一行中的标记3匹配的位置,然后将语句回显到文件。我正在寻找一个输出文件,显示:

MYFOLDER_JobA_MYFOLDER_JobB matches JobA_ENDED_OK
MYFOLDER_JobA_MYFOLDER_JobC matches JobA_ENDED_OK
MYFOLDER_JobB_MYFOLDER_JobD matches JobB_ENDED_OK
MYFOLDER_JobC_MYFOLDER_JobD matches JobC_ENDED_OK
MYFOLDER_JobD_MYFOLDER_JobE matches JobD_ENDED_OK

我知道这是一个带有DO的FOR循环,我只是没有得到其余部分。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir"
SET "destdir=U:\destdir"
SET "filename1=%sourcedir%\q46510665.txt"
SET "outfile=%destdir%\outfile.txt"
(
FOR /f "usebackqdelims=" %%h IN ("%filename1%") DO (
 SET "col4line=%%h"
 SET "col4line=!col4line:,=|,|!"
 FOR /f "tokens=1-4delims=," %%a IN ("!col4line!") DO IF "%%d" neq "|" (
  FOR /f "usebackqdelims=" %%H IN ("%filename1%") DO (
   SET "col3line=%%H"
   SET "col3line=!col3line:,=|,|!"
   FOR /f "tokens=1-4delims=," %%A IN ("!col3line!") DO (
    IF "%%d|"=="%%C" (
     SET "reportline=%%a_%%b_%%A_%%B matches %%C"
     ECHO !reportline:^|=!
    )
   )
  ) 
 )
)
)>"%outfile%"

GOTO :EOF

您需要更改sourcedirdestdir的设置以适合您的具体情况。

我使用了一个名为q46510665.txt的文件,其中包含我的测试数据。

生成定义为%outfile%

的文件

对于文件中的每一行,通过col4line将变量%%h设置为整行,然后将,替换为|,|,以便连续,将被分开。在,上标记并忽略任何只有|作为其第四个标记的行(即最后一列为空)。

这次通过%%Hcol3line中的每一行重复此过程到|(注意案例差异以使用不同的实际元变量),如果第三列与第四列匹配+ |从外部循环中,组合来自标记和输出的报告行,删除this.album