;Tool to archive files with specific extensions grouped by that extension and kept in same file structure
;Will also keep original files in tact
;@Author - Scott Landau
;@Created - 5/23/2010
;@Last Edited - 5/23/2010
;Includes
#include <File.au3>
#include <Array.au3>
#include <Zip.au3>
;Globals
Local $tempExts="ade|adp|app|asa|ashx|asp|bas|bat|cdx|cer|chm|class|cmd|com|cpl|crt|csh|der|exe|fxp|gadget|hlp|hta|htr|htw|ida|idc|idq|ins|isp|its|jse|ksh|lnk|mad|maf|mag|mam|maq|mar|mas|mat|mau|mav|maw|mda|mdb|mde|mdt|mdw|mdz|msc|msh|msh1|msh1xml|msh2|msh2xml|mshxml|msi|msp|mst|ops|pcd|pif|prf|prg|printer|pst|reg|rem|scf|scr|sct|shb|shs|shtm|shtml|soap|stm|url|vb|vbe|vbs|ws|wsc|wsf|wsh"
Local $arrayExts = StringSplit($tempExts, "|")
;Methods
;Get the root directory for the archive
;@Return String
Func getRoot()
Local $root = FileSelectFolder("Select Root:", "C:\")
Return $root
EndFunc
;Gets all the subdirectories of the given directory
;@Param String
;@Return Array
Func getAllDirs($dir)
Local $folderList = _FileListToArray($dir, "*", 2)
Return $folderList
EndFunc
;Gets all the files of the given directory
;@Param String
;@Return Array
Func getAllFiles($dir)
Local $fileList = _FileListToArray($dir, "*", 1)
Return $fileList
EndFunc
;Get the file extension
;@Param String
;@Return String
Func getExt($file)
Local $ext
Local $pos = StringInStr($file, ".")
$ext = StringTrimLeft($file, $pos)
Return $ext
EndFunc
;Is bad extension?
;@Param String
;@Return Int
Func isBad($file)
Local $retval
Local $ext = getExt($file)
Local $pos = _ArraySearch($arrayExts, $ext)
If Not ($pos == -1) Then
$retval = 1
Else
$retval = 0
EndIf
Return $retval
EndFunc
;Get all file extensions in current directory
;@Param String
;@Return Array
Func getAllExts($dir)
Local $added = 0
Local $allExts[1]
Local $files = getAllFiles($dir)
Local $max = UBound($files)
For $i = 0 to $max - 1
Local $ext = getExt($files[$i])
If ($added == 0) Then
$allExts[0] = $ext
$added = 1
Else
_ArrayAdd($allExts, $ext)
EndIf
Next
EndFunc
;Actual archiving algorithm
;@Param String
Func algorithm($dir)
Local $dirs = getAllDirs($dir)
Local $files = getAllFiles($dir)
Local $allExts = getAllExts($dir)
Local $numExts = UBound($arrayExts)
Local $numFiles = UBound($files)
For $i = 0 to $numExts - 1
Local $pos = _ArraySearch($allExts, $arrayExts[$i])
If Not ($pos == -1) Then
$zip = _Zip_Create(@WorkingDir & "\" & $arrayExts[$i] & "_zip.zip")
For $j = 0 to $numFiles - 1
Local $fileExt = getExt($files[$j])
If ($fileExt == $arrayExts[$i]) Then
_Zip_AddFile($zip, $files[$j])
EndIf
Next
EndIf
Next
Local $numDirs = UBound($dirs)
For $k = 0 to $numDirs - 1
algorithm($dirs[$k])
Next
EndFunc
;Main archiving function to be run in 'Main' comment field
;Void
Func main()
Local $root = getRoot()
algorithm($root)
EndFunc
;Main
main()
views:
221answers:
1
A:
To find out what's wrong, you need to either:
- Add a progressbar and update it as the application runs through each function.
- Use ConsoleWrite() to help you track what the application is doing as it runs when you are debugging in Scite.
- Log your progress/success/errors to a log file that you can examine after you have run the application.
I would recommend doing all the above.
JohnForDummies
2010-05-26 13:54:49
#AutoIt3Wrapper_run_debug_mode=YAt the top of a script will make the wrapper output each line to consolewrite.
Copas
2010-05-26 20:24:22
Nice. I had never used that before. Thanks.
JohnForDummies
2010-05-26 21:14:58
Also, using message boxes in key places, especially for variable contents, can be useful to see if the program is performing the way you'd expect at certain steps along the way.
MaQleod
2010-08-22 22:15:17