请有人告诉我如何在文件列表中找到特定模式。 我使用命令:
dir *.txt /b /s >> C:\Users\Amrendra\Downloads\NIT_Testing\fileList.txt
在fileList.txt
我有一个文件列表。
现在我想在列出的所有文件中找到一个特定的模式abc
所以我希望每个包含该模式的行都写入一个新文件。
请建议,因为我对批处理命令完全不熟悉。
由于
答案 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
。