Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

A .bat or .wsh script that can search for files

I am looking for some examples of a .bat OR .wsh script that can do the following:

  • Recursively read file names in a directory with a user-provided extension (.dll, .exe, etc)
  • Search a user-provided directory for the above file names
  • Generate a txt or xls report of the findings, like: x.txt was found in "C:\temp", "C:\blah"

TIA.

EDIT:

Oops, I should clarify: there are two directories and two searches here.

Search 1:

  • Search a user provided directory "Dir 1" for all *.dll's.

Search 2:

  • Search a different user provided directory "Dir 2" for the file names generated in Search 1. This search also needs to be recursive.

So, if Search 1 finds foo.dll, foo2.dll and foo3.dll in Dir 1, Search 2 should look in Dir 2 for foo.dll, foo2.dll and foo3.dll, and provide a report (simple listing) of each found file.

like image 836
chrome Avatar asked Jan 05 '09 22:01

chrome


People also ask

What is a .BAT file used for?

A batch file is a script file that stores commands to be executed in a serial order. It helps automate routine tasks without requiring user input or intervention. Some common applications of batch files include loading programs, running multiple processes or performing repetitive actions in a sequence in the system.

What are .bat files called?

A BAT file is known as a batch file runs with DOS and all versions of Windows, under cmd.exe. It consists of a series of line commands in plain text to be executed by the command-line interpreter to perform different tasks, such as running maintenance utilities within Windows or starting typical programs.

What is batch file scripting?

Batch Scripting consists of a series of commands to be executed by the command-line interpreter, stored in a plain text file. It is not commonly used as a programming language and so it is not commonly practiced and is not trending but its control and dominance in the Windows environment can never be neglected.


2 Answers

Why not use dir?

Search current directory and all subdirs for dlls

dir /S *.dll

Search all of C for dlls

dir /S C:\*.dll

Save a report

dir /S C:\*.dll > report.txt
like image 164
Tom Ritter Avatar answered Nov 06 '22 07:11

Tom Ritter


Put the following in a .bat file, say 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 is the user provided file mask.

%2 is the user provided directory to search first.

%3 is the user provided directory to search second.

Call from the command line to generate a report:

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

The <nul (set /p) trick will output text to the console without a new line (courtesy Pax from this thread: How to code a spinner for waiting processes in a Batch file?)

The 2>&1 added when calling the batch file is needed to capture all the output to the file (courtesy aphoria from this thread: Underused features of Windows batch files)

like image 36
Patrick Cuff Avatar answered Nov 06 '22 07:11

Patrick Cuff