caspermurphy Posted November 25, 2015 Posted November 25, 2015 Hello,First I will apologise. I was not sure if I should post a new topic or reply to the original topic that was posted four years ago. I haven’t used autoit in quite some time and I was not really great at it back then so I am really rusty now.I was reading this post https://www.autoitscript.com/forum/topic/132159-_findinfile-search-for-a-string-within-files-located-in-a-specific-directory/?page=1It appears to do what I would like, which is to look in a folder that contains several hundred files for a particular string in each file and return those results. But I am not sure exactly where I need to put certain declarations in it.Directory is o:/RFPThe files are word docx documentsString to find is: BR_Field_Auditor_Inventory_ThresholdIdeally I would like the input to read from a file and then place the “found” string along with the name of the document in another file. I see that guinnes has provide a link that will help me with that. I just wanted to state what my intentions are so as not yup leave anything out. The only thing I mustard so far was that this $sSearch = ' /c:' & $sSearch may need to be changed to: $sSearch = ' /O:' & $sSearch I see leading space between the quotes ‘ /c: does that matter?I know I must declare $sFilePath and $sSearch but I am not seeing or understanding where.I have been using thishttps://www.autoitscript.com/forum/topic/85567-find-string-in-files/ for finding a couple of strings from time to time but now I need something that will find multiple strings within multiple files.Sorry again for asking probably a very basic question. I appreciate any help.ThanksJohn
ViciousXUSMC Posted November 25, 2015 Posted November 25, 2015 Something like this?expandcollapse popup#Include <Array.au3> #Include <Constants.au3> $sSearch = "BR_Field_Auditor_Inventory_Threshold" $sFilePath = "O:\RFP" $sMask = "*.docx" $sResultsFile = @ScriptDir & "\Results.txt" $aFiles = _FindInFile($sSearch, $sFilePath, $sMask) ;_ArrayDisplay($aFiles) ;Uncomment to see results If FileExists($sResultsFile) Then FileDelete($sResultsFile) $hFile = FileOpen($sResultsFile, $FO_APPEND) FileWrite($hFile, "Scan Compiled On: " & @MON & "/" & @MDAY & "/" & @YEAR & @CRLF) FileWrite($hFile, "Result Files Containing String: " & $sSearch & @CRLF & @CRLF) For $i = 1 to $aFiles[0] FileWrite($hFile, $aFiles[$i] & @CRLF) Next FileClose($hFile) Func _FindInFile($sSearch, $sFilePath, $sMask = '*', $fRecursive = True, $fLiteral = Default, $fCaseSensitive = Default, $fDetail = Default) Local $sCaseSensitive = $fCaseSensitive ? '' : '/i', $sDetail = $fDetail ? '/n' : '/m', $sRecursive = ($fRecursive Or $fRecursive = Default) ? '/s' : '' If $fLiteral Then $sSearch = ' /c:' & $sSearch EndIf If $sMask = Default Then $sMask = '*' EndIf $sFilePath = StringRegExpReplace($sFilePath, '[\\/]+$', '') & '\' Local Const $aMask = StringSplit($sMask, ';') Local $iPID = 0, $sOutput = '' For $i = 1 To $aMask[0] $iPID = Run(@ComSpec & ' /c ' & 'findstr ' & $sCaseSensitive & ' ' & $sDetail & ' ' & $sRecursive & ' "' & $sSearch & '" "' & $sFilePath & $aMask[$i] & '"', @SystemDir, @SW_HIDE, $STDOUT_CHILD) ProcessWaitClose($iPID) $sOutput &= StdoutRead($iPID) Next Return StringSplit(StringStripWS(StringStripCR($sOutput), BitOR($STR_STRIPLEADING, $STR_STRIPTRAILING)), @LF) EndFunc ;==>_FindInFile robertocm 1
caspermurphy Posted November 27, 2015 Author Posted November 27, 2015 Hi ViciousXUSMC,it always help to declare the variables....I also was running an older version of autoit, helps if I had the latest version.Thank you for help and the code.John
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now