j0kky Posted May 6, 2014 Posted May 6, 2014 (edited) Probably there are billions of posts about it, but this is my version It lists all files of the selected path and the files in its subdirectories. It can be easily converted in a function like _FileListToArray or it can be used to work on those files. expandcollapse popupLocal $path = InputBox("Path", "Enter the path", @DesktopDir, " M") If @error Then Exit Local $count_sub = 0, $k = 0 #forcedef $dir_array ;necessary for tidy.exe If FileExists($path) Then ;adds or replaces "/" with "\" at the end of the path If StringRight($path, 1) <> "\" Then If StringRight($path, 1) == "/" Then $path = StringTrimRight($path, 1) & "\" Else $path &= "\" EndIf EndIf Else MsgBox(0,"Error","The selected folder doesn't exist") Exit EndIf While 1 Local $search = FileFindFirstFile($path & "*.*") If $search = -1 Then If @error == 1 Then ;the folder is empty If Not IsDeclared("dir_array") Then MsgBox(0, "Info", "The folder is empty") Exit EndIf Else ;other errors, for example an error occurs if there aren't admin rights for some folder If IsDeclared("dir_array") Then ConsoleWrite($path & " ->>> Some errors occurred with this folder" & @CRLF) ;doesn't work with #requireadmin Else MsgBox(0, "Error", "No files/directories matched the search pattern" & @CRLF & $path) Exit EndIf EndIf EndIf While 1 Local $file = FileFindNextFile($search) If @error Then ;files are finished FileClose($search) If $count_sub <> 0 Then ;if there aren't subdirectories If IsDeclared("dir_array") Then ;$dir_array contains every found subdirectory, it has 2 dimensions: the first is the level, the second is the subdirectories list If $count_sub > UBound($dir_array, 2) Then ReDim $dir_array[UBound($dir_array) + 1][$count_sub] Else ReDim $dir_array[UBound($dir_array) + 1][UBound($dir_array, 2)] EndIf Else Dim $dir_array[1][$count_sub] EndIf $count_sub = 0 Local $search = FileFindFirstFile($path & "*.*") While 1 ;saves all found subdirectories in the last level Local $subfolder = FileFindNextFile($search) If @error Then ExitLoop if @extended == 1 Then $dir_array[UBound($dir_array) - 1][$k] = $subfolder $k += 1 EndIf WEnd $k = 0 FileClose($search) $path &= $dir_array[UBound($dir_array) - 1][0] & "\" ;"c:\windows\system32\" --> "C:\windows\system32\drivers\" ExitLoop Else ;if the directory hasn't subdirectories If IsDeclared("dir_array") Then If UBound($dir_array) > 1 Then ;if there is more than one level if UBound($dir_array, 2) > 1 Then If $dir_array[UBound($dir_array) - 1][1] <> "" Then ;if there is more than one subdirectory in the last level For $i = 0 To (UBound($dir_array, 2) - 2) ;deletes the first subdirectory of the last level and replace it with the second subdirectory $dir_array[UBound($dir_array) - 1][$i] = $dir_array[UBound($dir_array) - 1][$i + 1] Next $dir_array[UBound($dir_array) - 1][UBound($dir_array, 2) - 1] = "" $path = StringRegExpReplace($path, "[^\\]*\\$", "") ;"C:\windows\system32\drivers\" --> "c:\windows\system32\" $path &= $dir_array[UBound($dir_array) - 1][0] & "\" ExitLoop Else $path = StringRegExpReplace($path, "[^\\]*\\[^\\]*\\$", "") ;"C:\windows\system32\drivers\etc\" --> "c:\windows\system32\" While 1 ReDim $dir_array[UBound($dir_array) - 1][UBound($dir_array, 2)] ;deletes the last level If $dir_array[UBound($dir_array) - 1][1] = "" Then If UBound($dir_array) == 1 Then ExitLoop(3) Else $path = StringRegExpReplace($path, "[^\\]*\\$", "") ContinueLoop EndIf Else ExitLoop EndIf WEnd For $i = 0 To (UBound($dir_array, 2) - 2) $dir_array[UBound($dir_array) - 1][$i] = $dir_array[UBound($dir_array) - 1][$i + 1] Next $dir_array[UBound($dir_array) - 1][UBound($dir_array, 2) - 1] = "" $path &= $dir_array[UBound($dir_array) - 1][0] & "\" ExitLoop EndIf Else ExitLoop(2) EndIf Else If UBound($dir_array, 2) > 1 Then If $dir_array[0][1] <> "" Then For $i = 0 To (UBound($dir_array, 2) - 2) $dir_array[0][$i] = $dir_array[0][$i + 1] Next $dir_array[0][UBound($dir_array, 2) - 1] = "" $path = StringRegExpReplace($path, "[^\\]*\\$", "") $path &= $dir_array[0][0] & "\" ExitLoop Else ExitLoop(2) EndIf Else ExitLoop(2) EndIf EndIf Else ExitLoop(2) EndIf EndIf EndIf if @extended = 1 Then ;it's a folder, not a file $count_sub += 1 ContinueLoop EndIf #cs ENTER YOUR CODE HERE, FOR EXAMPLE: ConsoleWrite("File: " & $path & $file & @CRLF) #ce ConsoleWrite("File: " & $path & $file & @CRLF) WEnd WEnd Edited May 6, 2014 by j0kky Spoiler Some UDFs I created: Winsock UDF STUN UDF WinApi_GetAdaptersAddresses _WinApi_GetLogicalProcessorInformation Bitwise with 64 bit integers An useful collection of zipping file UDFs
guinness Posted May 6, 2014 Posted May 6, 2014 There is already a UDF function called _FileListToArrayRec(). UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
JohnOne Posted May 6, 2014 Posted May 6, 2014 Decent. Looks like you put a fair bit of time into it. Variations of existing functions and code can't harm and are always welcome. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans.
BrewManNH Posted May 6, 2014 Posted May 6, 2014 BTW, the "M2" in the inputbox limits the user from putting more than 2 characters into it. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
j0kky Posted May 6, 2014 Author Posted May 6, 2014 @guinness and @johnONE: thank you! @BrewmanNH: you're right! Don't know why there was that "2"! I've just corrected the script! Spoiler Some UDFs I created: Winsock UDF STUN UDF WinApi_GetAdaptersAddresses _WinApi_GetLogicalProcessorInformation Bitwise with 64 bit integers An useful collection of zipping file UDFs
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