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 文件中的单个变量,但这是另一种蠕虫)。在此先感谢您的帮助。

4

3 回答 3

14

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

DIR abcd*.xml /s /b
于 2013-04-25T20:40:39.307 回答
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
于 2013-04-25T20:40:16.407 回答
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!"
    )
)
于 2014-07-20T13:53:21.893 回答