在子目录中搜索filename中的字符串

时间:2013-04-25 20:33:18

标签: batch-file findstr

我有一个大的文件夹目录(称之为C:\ Main)。我需要设置一个批处理脚本来搜索该目录的子文件夹中的文件名中的字符串(而不是文件中的文本)。我找不到答案了。

基本上,假设我需要在C:\ Main \ *中的所有文件名中搜索字符串“abcd”。我只是在寻找XML文件的匹配项。所以我需要找到:

C:\主\ Secondary1 \ abcd_othertext.xml

C:\主\ Secondary2 \ abcd_othertext.xml

C:\主\ Secondary3 \ abcd_othertext.xml

在该主目录中的所有数百个文件夹中。然后我需要输出所有匹配(理想情况下是bat文件中的各个变量,但这是一个不同的蠕虫)。在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:14)

DIR命令可以在子目录中执行通配符搜索。

DIR abcd*.xml /s /b

答案 1 :(得分:5)

您可以使用For / R循环:http://ss64.com/nt/for_r.html

@Echo OFF

Set "Pattern=abcd"

For /R "C:\" %%# in (*.xml) Do (
    Echo %%~nx# | FIND "%Pattern%" 1>NUL && (
        Echo Full Path: %%~#
        REM Echo FileName : %%~nx#
        REM Echo Directory: %%~p#
    )
)

Pause&Exit

修改 ......对于个别变量:

@Echo OFF

Set "Pattern=abcd"

For /R "C:\" %%# in (*.xml) Do (
    Echo %%~nx# | FIND "%Pattern%" 1>NUL && (
        Set /A "Index+=1"
        Call Set "XML%%INDEX%%=%%~#"
        Echo Full Path: %%~#
        REM Echo FileName : %%~nx#
        REM Echo Directory: %%~p#
    )
)

CLS
Echo XML1 = %XML1%
Echo XML2 = %XML2%

Pause&Exit

答案 2 :(得分:0)

ElektroStudio'回答打印目录中的空格,反斜杠和缺少驱动器号的已修复问题:

@ECHO OFF
SETLOCAL enabledelayedexpansion

SET "pattern=abcd"
FOR /R "C:\" %%# in (*.xml) DO (
    ECHO %%~nx# | FIND "%pattern%" 1>NUL && (
        SET current_dir=%~d0%%~p#
        SET current_dir=!current_dir:\=/!

        ECHO Directory: "!current_dir!"
    )
)