在子目录中搜索文件名包含特定字符的文件

5

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

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

C:\Main\Secondary1\abcd_othertext.xml

C:\Main\Secondary2\abcd_othertext.xml

C:\Main\Secondary3\abcd_othertext.xml

在那个主目录中的数百个文件夹中。 然后我需要输出所有匹配项(理想情况下是在bat文件中的单独变量中,但这是另一个问题)。 预先感谢您的帮助。

3个回答

14

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

DIR abcd*.xml /s /b

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

0

ElektroStudios修复了打印目录时出现空格、反斜杠和缺少驱动器号的问题:

@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!"
    )
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接