Search text in word files

Discussion forum for all Windows batch related topics.

Moderator: DosItHelp

Post Reply
Message
Author
Matt Williamson
Posts: 82
Joined: 30 Dec 2013 10:16
Location: United States by the big waterfall

Search text in word files

#1 Post by Matt Williamson » 27 Mar 2014 08:44

Someone on SO asked a question of how to search for text in word documents and copy the files to a specified folder. The thread got closed but I wrote a routine to do it including the ability to replace text as well. I figured it might come in handy for someone or at least get some critiquing out of it. It works on .doc and .docx files. I've only tested it on Office 2003 with the Office 2k7 file format converters installed though.

Code: Select all

@echo off
setlocal enabledelayedexpansion

set "folder=My Folder"
Call :GetDriveLetters letters
for %%a in (!letters!) do ( 
  for /f "Tokens=*" %%b in ('dir /s /b /a-d "%%a\*.doc"') do (
    Echo searching %%b
   call :SearchReplaceWord "%%b" "apple" ret
   if not !errorlevel! EQU 1 echo copy "%%b" "%~dp0%folder%" & echo.
  )

exit /b

:GetDriveLetters <return>
setlocal enabledelayedexpansion
for /f "tokens=1" %%a in (
  'wmic logicaldisk where drivetype^=3 get deviceid ^|findstr ":" ^|findstr /v /r "^^$"'
) do (set DL=!DL! %%a)
endlocal & set %~1=%DL% & exit /b
 

:SearchReplaceWord <WordDoc> <StringToSearch> <OptionalReplace> <Return>
setlocal
set vbs="%temp%\_.vbs"
if exist %vbs% del /f /q %vbs%
>%vbs% echo on error resume next
>>%vbs% echo Set objWord = CreateObject("Word.Application")
>>%vbs% echo objWord.visible = True
>>%vbs% echo Set objDoc = objWord.Documents.Open("%~1")
>>%vbs% echo Set objSelection = objWord.Selection
>>%vbs% echo objSelection.Find.Forward = True
>>%vbs% echo objSelection.Find.wrap = 1
>>%vbs% echo objSelection.Find.Text = "%~2"
if "%~4" NEQ "" (
>>%vbs% echo objSelection.Find.Replacement.Text = "%~3"
>>%vbs% echo Do While True
>>%vbs% echo   objSelection.Find.Execute,,,,,,,,,,2
) ELSE (
>>%vbs% echo Do While True
>>%vbs% echo   objSelection.Find.Execute
)
>>%vbs% echo     If objSelection.Find.Found Then
>>%vbs% echo       strWord = objSelection.Text
>>%vbs% echo       Wscript.Echo strWord
>>%vbs% echo   Else
>>%vbs% echo     Exit Do
>>%vbs% echo   End If
>>%vbs% echo Loop
>>%vbs% echo objDoc.close
>>%vbs% echo objWord.quit
>>%vbs% echo set objSelection = Nothing
>>%vbs% echo set objDoc = Nothing
>>%vbs% echo set objWord = Nothing
for /f "tokens=*" %%a in ('cscript //nologo %vbs%') do set result=%%a
if exist %vbs% del /f /q %vbs%
if "%result%" EQU "" (set a=1) else set a=0
endlocal & if "%~4" NEQ "" (set %~4=%result% & exit /b %a%
) else (
set %~3=%result% & exit /b %a%)
exit /b

foxidrive
Expert
Posts: 6031
Joined: 10 Feb 2012 02:20

Re: Search text in word files

#2 Post by foxidrive » 27 Mar 2014 10:53

Nice to see you posting Matt. It could come in handy.

Post Reply