2009-01-05 67 views
7

Estoy buscando algunos ejemplos de un .bat o script .wsh que pueden hacer lo siguiente:Un .bat o .wsh script que puede buscar archivos

  • leer de forma recursiva los nombres de archivo en un directorio con una extensión proporcionada por el usuario (.dll, .exe, etc.)
  • Buscar en un directorio proporcionado por el usuario para los nombres de archivo anteriores
  • Genere un informe txt o xls de los hallazgos, como: x.txt se encontró en "C : \ temp "," C: \ blah "

TIA.

EDIT:

Vaya, debo aclarar: hay dos directorios y dos búsquedas aquí.

Búsqueda 1:

  • Buscar un directorio de usuario proporcionado "Dir 1" para todos * .dll.

Búsqueda 2:

  • Buscar un usuario proporcionado directorio diferente "Dir 2" para los nombres de los archivos generados en la búsqueda 1. Esta búsqueda también necesita ser recursivo.

lo tanto, si la búsqueda encuentra foo.dll 1, foo2.dll y foo3.dll en Dir 1, 2 Búsqueda debe mirar en Dir 2 para foo.dll, foo2.dll y foo3.dll, y proporcionar una informe (listado simple) de cada archivo encontrado.

Respuesta

9

poner lo siguiente en un archivo .bat, FindAll.bat decir:

@echo OFF 

for /f %%F in ('dir %2\%1 /s /b') do (
    <nul (set /p msg=%%~nxF) 
    for /f %%G in ('dir %3\%%~nxF /s /b') do (
     if exist %%G (
      @echo found at %%G 
     ) 
    ) 
) 

%1 es el usuario proporcionada máscara de archivo.

%2 es el directorio proporcionado por el usuario para buscar primero.

%3 es el directorio proporcionado por el usuario para buscar en segundo lugar.

llamada desde la línea de comandos para generar un informe:

FindAll *.dll d:\dir1 d:\dir2 > dll_report.txt 2>&1 

El truco <nul (set /p) habrá de texto de salida de la consola sin una nueva línea (cortesía Pax de este hilo: How to code a spinner for waiting processes in a Batch file?)

El 2>&1 añadido al llamar al archivo por lotes es necesario para capturar todos los resultados del archivo (cortesía aphoria de este hilo: Underused features of Windows batch files)

+0

Esto nos acerca; necesita agregar un/s a ​​la primera línea. Lo que realmente necesitamos es una forma de quitar el directorio del nombre del archivo en %% f; en este momento está buscando el nombre completo de archivo de dir1 en dir2. Además, la búsqueda en dir2 (%% 3) debe ser recursiva también. – chrome

+0

OK, edité mi respuesta con algo que podría funcionar ... –

+0

Genial, gracias por regresar y alterar esto, y por mostrar cómo usar & 1. – chrome

18

¿Por qué no utilizar dir?

Directorio de la búsqueda actual y todos los subdirectorios para archivos DLL

dir /S *.dll 

Buscar todas C de DLL

dir /S C:\*.dll 

Guardar un informe

dir /S C:\*.dll > report.txt 
+0

suena como ¿deberes? – devio

+0

No, no deberes, un proyecto paralelo – chrome

+0

Revisa mi respuesta de seguimiento, que aclara la pregunta. – chrome

-3

Estudiaría Robocopy para ver si esto podría ayudar (la bandera/L es una pista).

Cuestiones relacionadas