如何在文件列表中查找特定内容

时间:2015-10-26 07:56:41

标签: windows batch-file cmd

请有人告诉我如何在文件列表中找到特定模式。 我使用命令:

dir *.txt /b /s >> C:\Users\Amrendra\Downloads\NIT_Testing\fileList.txt

fileList.txt我有一个文件列表。 现在我想在列出的所有文件中找到一个特定的模式abc 所以我希望每个包含该模式的行都写入一个新文件。

请建议,因为我对批处理命令完全不熟悉。

由于

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全正确。您已将某些文件夹中所有.txt文件的名称回显到一个文本文件中。现在,您要逐行检查文件名中包含某些子字符串的文件名。那是对的吗?如果是,这是解决方案:

@ECHO OFF
SET targetFile=C:\Some\Path\SomeTextFile.txt
SET sourceFile=C:\Some\Path\Source.txt
SETLOCAL EnableDelayedExpansion
TYPE NUL>%targetFile%
FOR /F "tokens=*" %%L IN (sourceFile) DO (
    SET templine=%%L
    SET templine=!templine:abc=!
    IF NOT !templine!==%%L (
        ECHO %%L>>%targetFile%
    )
)

让我们看看它是如何工作的:首先我们将包含文件名的文件的路径放入变量%sourceFile%,将目标文件的路径放入变量%targetFile%。我们需要EnableDelayedExpansion能够在FOR循环中使用更改变量。 TYPE NUL>%targetFile%只是清除目标文件,以防前一次运行中有一些条目。

主要工作在FOR循环中完成。我们逐行读取源文件,并想检查该行是否包含我们要查找的子字符串。为此,我们首先将行(%%L)存储在临时变量中。然后我们用空字符串替换任何出现的搜索字符串,意味着我们只是从临时字符串中删除abc。最后,我们将修改后的临时字符串与原始字符串进如果它们相等,我们可以确定serch字符串abc不在原始字符串中。反过来说,如果字符串不同,子字符串就在原始字符串中。所以在第二种情况下我们做ECHO %%L>>%targetFile%这意味着我们将包含搜索子字符串的整个文件名写入目标文件。 Etvoilà,我们已经完成了!

编辑:如果您想搜索所有列出的子文件的文件,请输入新代码:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET sourceFile=C:\Users\Amrendra\Downloads\NIT_Testing\fileList.txt
SET targetFile=C:\Users\Amrendra\Downloads\NIT_Testing\newList.txt
SET searchString=abc
TYPE NUL>%targetFile%
FOR /F "tokens=*" %%L IN (%sourceFile%) DO (
    FINDSTR %searchString% "%%L">NUL
    IF !ERRORLEVEL!==0 ECHO %%L>>%targetFile%
)

这里我们使用findstr来检查文本文件是否包含我们正在搜索的字符串。由于findstr通常会输出包含搜索字符串的行(我们不想要),我们只需使用>NUL将命令静音。我们真正需要的是ERRORLEVEL!如果在文件findstr中找到字符串,则会将ERRORLEVEL设置为0或1。因此,我们唯一要做的就是检查!ERRORLEVEL!==0