2010-05-24 7 views
-2
;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() 
+1

Необходимо предоставить более подробную информацию. Возможно, вам необходимо обновить исходный вопрос (http://stackoverflow.com/questions/2867689/autoit-scripts-runs-without-error-but-i-cant-see-archive- обновление) вместо создания нового. – aphoria

ответ

0

Чтобы выяснить, что случилось, вам нужно либо:

  • Добавить прогрессбар и обновлять его как приложение работает через каждую функцию.
  • Используйте ConsoleWrite(), чтобы помочь вам отслеживать, что делает приложение, когда оно выполняется при отладке в Scite.
  • Запишите свой прогресс/успех/ошибки в файл журнала, который вы можете проверить после запуска приложения.

Я бы рекомендовал сделать все вышеперечисленное.

+2

# AutoIt3Wrapper_run_debug_mode = Y В верхней части скрипта будет выведена оболочка каждой строки в consolewrite. – Copas

+1

Кроме того, использование ящиков сообщений в ключевых местах, особенно для содержимого переменных, может быть полезно, чтобы увидеть, работает ли программа так, как вы ожидали бы на определенных этапах на этом пути. – MaQleod

Смежные вопросы