2013-04-25 5 views
5

Ho una grande directory di cartelle (chiamiamola C: \ Main). Ho bisogno di impostare uno script batch per cercare nelle sottocartelle di quella directory una stringa all'interno del nome file (non il testo all'interno del file). Sto avendo difficoltà a trovare una risposta.Ricerca stringa all'interno del nome file nelle sottodirectory

In sostanza, supponiamo di dover cercare la stringa "abcd" all'interno di tutti i nomi di file in C: \ Main \ *. Sto solo cercando le corrispondenze che sono un file XML. Così ho bisogno di trovare:

C: \ Main \ Secondary1 \ abcd_othertext.xml

C: \ Main \ Secondary2 \ abcd_othertext.xml

C: \ Main \ Secondary3 \ abcd_othertext.xml

tra tutte le centinaia di cartelle in quella directory principale. Poi ho bisogno di produrre tutte le corrispondenze (idealmente a singole variabili in un file bat, ma questa è una lattina diversa di worm). Grazie in anticipo per il vostro aiuto.

risposta

5

È possibile utilizzare un ciclo 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 

EDIT: ... variabili Per individualmente:

@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 
12

Il comando DIR può eseguire una ricerca con caratteri jolly nelle sottodirectory . anwser

DIR abcd*.xml /s /b 
+0

bello piccolo e facile! –

0

ElektroStudios' con il problema fisso con spazi, backslash e lettera di unità mancante negli elenchi stampati:

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