; Script Information =========================================================== ; Name: File String Search ; Description: Search files for a specific string (Inspired by TLM) ; https://autohotkey.com/boards/viewtopic.php?f=6&t=27299 ; AHK Version: AHK_L 1.1.24.04 (Unicode 32-bit) - December 17, 2016 ; OS Version: Windows 2000+ ; Language: English - United States (en-US) ; Author: Weston Campbell <westoncampbell@gmail.com> ; Filename: StringSearch.ahk ; ============================================================================== ; Revision History ============================================================= ; Revision 1 (2017-01-25) ; * Initial release ; ============================================================================== ; Auto-Execute ================================================================= #SingleInstance, Force ; Allow only one running instance of script #Persistent ; Keep the script permanently running until terminated #NoEnv ; Avoid checking empty variables for environment variables #Warn ; Enable warnings to assist with detecting common errors ;#NoTrayIcon ; Disable the tray icon of the script SendMode, Input ; The method for sending keystrokes and mouse clicks SetWorkingDir, %A_ScriptDir% ; Set the working directory of the script SetBatchLines, -1 ; The speed at which the lines of the script are executed SetWinDelay, -1 ; The delay to occur after modifying a window SetControlDelay, -1 ; The delay to occur after modifying a control OnExit("OnUnload") ; Run a subroutine or function when exiting the script return ; End automatic execution ; ============================================================================== ; Labels ======================================================================= ControlHandler: VarCount := "" If (A_GuiControl = "ButtonDir") { FileSelectFolder, DirSel,,, 选择目录... IfEqual, ErrorLevel, 1, return GuiControl,, EditDir, % DirSel GuiControl, choose, EditDir, % DirSel } Else If (A_GuiControl = "ButtonSearch") { Gui, Submit, NoHide GuiControl, Choose, Tab, 2 LV_Delete() SB_SetText("搜索中...", 1) SB_SetText("", 2) GuiControl, Disable, ButtonSearch GuiControl, Enable, ButtonStop Loop, Files, % EditDir "\" (EditType ? EditType : "*.*"), FR { Try FileRead, MatchRead, % A_LoopFileFullPath IfEqual, SearchStop, 1, Break if !fullword { StringReplace, MatchRead, MatchRead, % EditString, % EditString, UseErrorLevel IfEqual, ErrorLevel, 0, Continue } else { MatchRead := RegExReplace(MatchRead, "i)\b" EditString "\b", EditString, VarCount) IfEqual, VarCount, 0, Continue } LV_Add("", (VarCount != "") ? VarCount : ErrorLevel, A_LoopFileFullPath) LV_ModifyCol(1, "AutoHdr") LV_ModifyCol(2, "AutoHdr") SB_SetText("`t`t搜索 " A_Index . " 个文件, (" LV_GetCount() "个匹配)", 2) } SearchStop := 0 GuiControl, Disable, ButtonStop GuiControl, Enable, ButtonSearch GuiControl, Enable, OpenFileFullPath GuiControl, Enable, OpenFile SB_SetText("扫描完毕", 1) } Else If (A_GuiControl = "ButtonStop") { SearchStop := 1 } return OpenFileFullPath: LV_GetText(FileFullPath, LV_GetNext("F"), 2) If Fileexist(FileFullPath) Run,% "explorer.exe /select," FileFullPath else msgbox,未选中或文件不存在。 Return OpenFile: LV_GetText(FileFullPath, LV_GetNext("F"), 2) If Fileexist(FileFullPath) Run "%FileFullPath%" else msgbox,未选中或文件不存在。 Return LV1x: Gui,1:default Gui,1:submit, nohide rcon := a_guicontrol Gui,1:ListView, %rcon% Extensions := "ahk,txt,bat,bas,ini,htm,html,csv,xml" ;- some extensions with text RN := LV_GetNext("C") RF := LV_GetNext("F") GC := LV_GetCount() if (rn = 0) return if A_GuiEvent = DoubleClick { LV_GetText(C2, a_eventinfo, 2) SplitPath,c2, , , ext, if Ext in %Extensions% { try ;run, notepad "%c2%" run, "D:\Program Files\Editor\Notepad3\Notepad3.exe" "%c2%" ;- open with notepad or other editors } } return GuiEscape: GuiClose: ExitSub: ExitApp ; Terminate the script unconditionally return ; ============================================================================== ; Functions ==================================================================== OnLoad() { Global ; Assume-global mode run_iniFile = %A_ScriptDir%\..\settings\setting.ini Static Init := OnLoad() ; Call function IniRead, EditDir, %run_iniFile%, 文件中查找字符, 路径, %A_Space% IniRead, SEditDir, %run_iniFile%, 文件中查找字符, 固定查找目录, %A_Space% IniRead, EditType, %run_iniFile%, 文件中查找字符, 类型, %A_Space% IniRead, EditString, %run_iniFile%, 文件中查找字符, 字符, %A_Space% SearchStop := 0 } OnUnload(ExitReason, ExitCode) { Global ; Assume-global mode Gui, Submit, NoHide if EditDir <> IniWrite, % EditDir, %run_iniFile%, 文件中查找字符, 路径 IniWrite, % EditType, %run_iniFile%, 文件中查找字符, 类型 IniWrite, % EditString, %run_iniFile%, 文件中查找字符, 字符 } GuiCreate() { Global ; Assume-global mode Static Init := GuiCreate() ; Call function If SEditDir not contains %EditDir% EditDirList:=EditDir "|" SEditDir else EditDirList:=SEditDir Gui, +LastFound -Resize +HWNDhGui1 Gui, Margin, 8, 8 Gui, Add, Tab3, vTab, 查找|搜索结果 Gui, Tab, 1 Gui, Add, Text, w460 BackgroundTrans Section, 目录: Gui, Add, ComBoBox, y+10 w416 vEditDir, % EditDirList Gui, Add, Button, x+10 yp w34 hp vButtonDir gControlHandler, ... Gui, Add, Text, xs y+20 w460 BackgroundTrans, 文件类型: Gui, Add, Edit, y+10 w460 vEditType, % EditType Gui, Add, Text, xs y+20 w460 BackgroundTrans, 字符: Gui, Add, Edit, y+10 w460 vEditString, % EditString GuiControl,choose,EditDir,% EditDir Gui, Add, CheckBox, xs y+10 h20 vfullword,全字符匹配(单词边界) Gui, Tab, 2 Gui, Add, ListView, w460 r10 vListView Grid +altsubmit vLV1 gLV1x, 找到次数|文件路径 Gui, Tab Gui, Add, Button, w80 h24 default vButtonSearch gControlHandler, 搜索 Gui, Add, Button, x+10 w80 h24 vButtonStop gControlHandler Disabled, 停止 Gui, Add, Button, x+10 w100 h24 vOpenFileFullPath gOpenFileFullPath Disabled, 打开文件位置 Gui, Add, Button, x+10 w100 h24 vOpenFile gOpenFile Disabled, 打开文件 Gui, Add, StatusBar,, SB_SetParts(120) Gui, Show, AutoSize, 文件字符搜索 } ; ==============================================================================
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)