Search and then delete depending on whether files contain a string

user1585297 picture user1585297 · Aug 8, 2012 · Viewed 7.3k times · Source

I'd like to search through multiple text files in a single directory for a string ('monkey'), if the string exists, then either, depending on what's easiest:

  1. rename the matching string - e.g. change monkey monkey1 and save then file and carry on searching/processing

or

  1. Delete any file that has the matching string.

Have searched but can't seem to find anything straightforward.

Answer

dbenham picture dbenham · Aug 8, 2012

Modifying the contents of a text file is fairly complex using native Windows batch commands, so option 1) is not easy. Though it is easy if you download a 3rd party tool like gnu sed for Windows.

Option 2) is very easy. You can do it on the command line without a batch file. Assuming your current directory is where you want to look for the files:

for /f "eol=: delims=" %F in ('findstr /m monkey *.txt') do del "%F"

If executed from within a batch file then you need to double up the percents - use %%F instead of %F.

There are many options to the FINDSTR command, such as /I for case insensitive search, /S to search subdirectories, and /R for primitive regex searches.