2009-01-05 11 views
7

Ich suche einige Beispiele für eine .bat oder WSH-Skript suchen, die folgendes tun:A .bat oder WSH-Skript, das für Dateien

  • Recursively Dateinamen in einem Verzeichnis lesen mit einem Vom Benutzer bereitgestellte Erweiterung (.dll, .exe usw.)
  • Durchsuchen Sie ein benutzerdefiniertes Verzeichnis nach den obigen Dateinamen
  • Generieren Sie einen TXT- oder XLS-Bericht der Ergebnisse, z. B .: x.txt wurde in "C : \ temp "," C: \ blah "

TIA.

EDIT:

Hoppla, ich klären sollte: Es gibt zwei Verzeichnisse und zwei Such hier.

Suche 1: für alle * .dll

  • einen Benutzer bereitgestellt Verzeichnisses "DuFormal 1" Suche.

Suche 2:

  • Suche einen anderen Benutzer zur Verfügung gestellt Verzeichnis „Dir 2“ für die Dateinamen erzeugt in Suche 1. Diese Suche muss auch rekursiv sein.

Also, wenn Suche 1 foo.dll, foo2.dll und foo3.dll in Dir 1, 2 Suche sollte in Dir 2 sucht foo.dll, foo2.dll und foo3.dll findet, und bieten eine Bericht (einfache Auflistung) jeder gefundenen Datei.

Antwort

9

folgend in einer BAT-Datei Stoßen, sagen FindAll.bat:

@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 die Benutzer Dateimaske vorgesehen ist.

%2 ist das vom Benutzer bereitgestellte Verzeichnis, um zuerst zu suchen.

%3 ist das vom Benutzer bereitgestellte Verzeichnis, um als zweites zu suchen.

Anruf von der Kommandozeile einen Bericht zu erstellen:

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

Der <nul (set /p) Trick Ausgabetext an die Konsole ohne eine neue Zeile (mit freundlicher Genehmigung Pax aus diesem Thread: How to code a spinner for waiting processes in a Batch file?)

Die 2>&1 hinzugefügt Beim Aufruf der Batch-Datei wird benötigt, um die gesamte Ausgabe in die Datei zu erfassen (mit freundlicher Genehmigung aphoria von diesem Thread: Underused features of Windows batch files)

+0

Das bringt uns nahe; muss ein/s zur ersten Zeile hinzufügen. Was wir wirklich brauchen, ist eine Möglichkeit, das Verzeichnis aus dem Dateinamen in %% f; Jetzt sucht es nach dem vollständigen Dateinamen von dir1 in dir2. Auch die Suche in dir2 (%% 3) muss rekursiv sein. – chrome

+0

OK, ich habe meine Antwort mit etwas bearbeitet, das funktionieren könnte ... –

+0

Toll, danke, dass du zurückkommst und das änderst, und für die Benutzung von & 1. – chrome

18

Warum nicht dir?

Suche aktuelle Verzeichnis und alle subdirs für dlls

dir /S *.dll 

alle C Suche nach dlls

dir /S C:\*.dll 

Speichern einen Bericht

+0

klingt wie Hausaufgaben? – devio

+0

Nein, nicht Hausaufgaben, ein Nebenprojekt – chrome

+0

Überprüfen Sie meine Follow-up-Antwort, die die Frage klärt. – chrome

-3

Ich würde Robocopy studieren, um zu sehen, ob das helfen könnte (die/L-Flagge ist ein Hinweis).