批处理文件,用于根据文本文件的行项目执行循环搜索

时间:2010-12-19 18:55:24

标签: windows search for-loop batch-file

我一直在这个论坛上阅读很棒的帖子,接近我想做的事情,但无法弄清楚确切的代码。

我想创建一个Windows批处理文件来执行以下操作:

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

感谢。

3 个答案:

答案 0 :(得分:1)

我目前没有运行Windows,因此我只能发布一些想法,而不是解决方案。

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

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

2a)作为替代方案,您可以迭代源目录中的文件(使用嵌套for)并为每个文件调用find,丢弃其输出并使用其退出代码({{1确定文件是否匹配(如果匹配则返回0,如果没有匹配则返回非零)。像这样:

%ERRORLEVEL%

3)使用for %%F in (%SourceDir%\*) do ( find "%Keyword%" %%F > nul if not errorlevel 1 (echo File %%F matches) else (echo File %%F does not match) ) 移动匹配文件。

答案 1 :(得分:0)

我写了以下代码但不确定我是否在正确的轨道上。这是我的设置: list.txt文件内容是(我的文件名搜索关键字) -

one
two
five
ten
six

f1文件夹包含 -

four.txt
one.txt
three.txt

我想将匹配的文件移动到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
)   
)
)
)

它正在运行,但找不到匹配的文件名。

感谢。

答案 2 :(得分:0)

存在多个问题。

FIND / i“%A%”...无效,FOR-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