Windows Batch file,根据文本文件的行项目执行循环搜索

Windows Batch file,根据文本文件的行项目执行循环搜索,windows,search,for-loop,batch-file,Windows,Search,For Loop,Batch File,我在这个论坛上读了很多很好的帖子,很接近我想做的事情,但是我想不出确切的代码 我要创建windows批处理文件以执行以下操作: 对文本文件的每一行项目(这是一个关键字列表)执行循环搜索,以查找特定目录中的文件 对于此搜索,部分匹配是可以的 每次找到文件时,将其移动到预定义目录(例如C:\temp\search\u results) 谢谢。我现在不运行Windows,所以我只能发布一些想法,而不是解决方案 1) 使用/f的迭代文件内容 2) 使用查找“%Keyword%”%SourceDir%

我在这个论坛上读了很多很好的帖子,很接近我想做的事情,但是我想不出确切的代码

我要创建windows批处理文件以执行以下操作:

  • 对文本文件的每一行项目(这是一个关键字列表)执行循环搜索,以查找特定目录中的文件
  • 对于此搜索,部分匹配是可以的
  • 每次找到文件时,将其移动到预定义目录(例如C:\temp\search\u results)

谢谢。

我现在不运行Windows,所以我只能发布一些想法,而不是解决方案

1) 使用/f的
迭代文件内容

2) 使用
查找“%Keyword%”%SourceDir%
获取匹配文件的列表。您必须从
find
的输出中解析出文件名

2a)作为替代方法,您可以迭代源目录中的文件(使用嵌套的
for
)并为每个文件调用
find
,放弃其输出并使用其退出代码(
%ERRORLEVEL%
)来确定文件是否匹配(如果存在匹配,则返回0,如果不匹配,则返回非零)。大概是这样的:

for %%F in (%SourceDir%\*) do (
    find "%Keyword%" %%F > nul
    if not errorlevel 1 (echo File %%F matches) else (echo File %%F does not match)
)

3) 使用
Move
移动匹配文件我编写了以下代码,但不确定是否正确。以下是我的设置: list.txt文件内容为(文件名搜索的我的关键字)--

f1文件夹包含--

我想把匹配的文件移到F2文件夹中,但代码简单,我用echo代替

我的代码是:

@ECHO OFF
SETLOCAL EnableDelayedExpansion


SET listfile=D:\batchtest\list.txt
SET searchdir=D:\batchtest\f1

FOR /F "tokens=*" %%A IN (%listfile%) DO (

FOR %%f in (%searchdir%\*) do (FIND /i "%A%" %%f
    if errorlevel 1 (
echo Search failed) else (
echo Search successful
)   
)
)
)
它正在运行,但找不到匹配的文件名


谢谢。

有多个问题

查找/i“%A%”。。。无法工作,Varibale的名称为%%A
第二个问题是:使用FIND检查文件的内容,而不是名称。 你应该使用缩进来避免太多的括号

你最好试试

FOR /F "tokens=*" %%A IN (%listfile%) DO (
    FOR %%f in (%searchdir%\*) do ( 
        set "filename=%%~f"
        set replaced=!filename:%%A=!
        if !replaced! NEQ !filename! (
           echo !filename! contains '%%A'
        )
    )
)
它试图用替换文件名中的%%A。
如果替换的文件名与文件名不相等,则文件名必须包含%%A

,可以成批执行。。。但是,您可以使用移植到windows的免费unix实用程序(例如AWK),它们更灵活。我看不出您的代码中有任何问题。也许你应该试试。谢谢你,杰布。这对我帮助很大。我很喜欢你比较字符串和文件名的方式。我现在需要使用标准字符串的不同变体。文件中的行项目可能是“Stephen King”,文件名的变体可能是:-Stephen King-Stephen King-Stephen_King等。我将尝试捕获所有变体。再次感谢。您可以将字符串“Stephen King”拆分为标记“Stephen”和“King”,并测试文件名中是否存在所有标记
@ECHO OFF
SETLOCAL EnableDelayedExpansion


SET listfile=D:\batchtest\list.txt
SET searchdir=D:\batchtest\f1

FOR /F "tokens=*" %%A IN (%listfile%) DO (

FOR %%f in (%searchdir%\*) do (FIND /i "%A%" %%f
    if errorlevel 1 (
echo Search failed) else (
echo Search successful
)   
)
)
)
FOR /F "tokens=*" %%A IN (%listfile%) DO (
    FOR %%f in (%searchdir%\*) do ( 
        set "filename=%%~f"
        set replaced=!filename:%%A=!
        if !replaced! NEQ !filename! (
           echo !filename! contains '%%A'
        )
    )
)