jben Posted April 20, 2008 Share Posted April 20, 2008 (edited) Hi everyone, I have this code that i've put together from the forums. However I have found that its getting very large, considering all it does is extract a zip file to a temp dir and then extract another zip file that was contained within the zip file, and then copy certain contents from a folder. My code seems rather large but I'm really not sure how I could condense it. My main worry is that I need to go through this process another 3 times to get other files from other folders(might be able to use a loop somehow?)...Sorry i've posted such a large amount of code and really hope someone can assist me in this dreadful matter. Thanks expandcollapse popup#include-once #include<MyExtras\_ZipPlugin.au3>;this is required for unzipping on dev PC ;unless the Au3Zip.dll is in the system folder.Just leaving this here for security. #include <File.au3>;this is required for checking files. #include <MyExtras\folder.au3>;this is for checking folders. $szPluginPath = @ScriptDir &"\Au3Zip.dll" $hPluginDll = PluginOpen($szPluginPath) ;------------------------------------------------------------------------------------------ ; INITIAL CHECKS BEFORE PROCEEDING ;------------------------------------------------------------------------------------------ If $hPluginDll = -1 Then MsgBox(266288,"Error:","Plugin not initialized.") Exit endif if Not FileExists ("C:\INPUT\*.zip") Then Exit ;------------------------------------------------------------------------------------------ ; RENAMES PARENT ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL RENAME THE ZIP FOLDER IN THE INPUT FOLDER TO A NAME THAT THE CODE WILL ;RECOGNIZE. THE PURPOSE IN THIS IS TO ENSURE THAT REGARDLESS OF THE ZIP FILE NAME, THE CODE ;WILL STILL EXTRACT THE FILES.ORIGINAL ZIP NAME IS IN THE FORMAT OF "WEEKLY UPDATE (DATE).ZIP" ;(DATE) IS UNIQUE FOR EACH UP ISSUE OF THE ZIP FILE, THE CODE BELOW RESOLVES THIS ISSUE. $targetDir = "C:\INPUT\" $aZipList = _FileListToArray($targetDir,"*.zip",1);this returns files only as defined in the AutoIT help files. If IsArray($aZipList) Then FileMove($targetDir &$aZipList[1],$targetDir &"DATA_PARENT.zip") EndIf ;------------------------------------------------------------------------------------------ ; EXTRACTS PARENT ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL EXTRACT THE INFORMATION IN THE INPUT FOLDER, WHICH HAS BEEN RENAMED TO DATA_PARENT $szZipFile = "C:\INPUT\DATA_PARENT.zip";this is the zip file to extract $szDestDir = "C:\EXTRCT_TEMP";this is the destination to extract the zip files If $hPluginDll = -1 Then MsgBox(266288,"Error:","Plugin not initialized.") Exit EndIf $aZipList = _ZipList2Array($szZipFile) for $x =0 to UBound($aZipList)-1 If StringLower(StringRight($aZipList[$x][1],4)) = ".zip" Then;this code extracts the file with the extensions specified here ConsoleWrite("Extracting:"&$aZipList[$x][1]);just shows Extracting in the AutoIT console at bottom for debugging purposes $vResult = _ZipUnZipItem($szZipFile,$aZipList[$x][1],$szDestDir) ConsoleWrite(" -- "&_ZipFormatMessage($ZR_RECENT)&@lf) EndIf Next ;------------------------------------------------------------------------------------------ ; RENAMES CHILD ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL SEARCH THE TEMP FOLDER FOR THE CHILD ZIP AND RENAME TO DATA_CHILD.ZIP ;THIS WILL ALSO ENSURE THAT REGARDLESS OF THE FILE (DATE) THAT THE FILE WILL STILL BE ;RECOGNIZED AND EXTRACTED. $F_Array = __FldrListToArray("C:\EXTRCT_TEMP\29944M_10386\", 0);the rest of this string is detected in the code below. For $I = 1 To Ubound($F_Array) -1 $targetDir = $F_Array[$I];this code states that the targetdir is the information provided via the $F_Array ;the purpose in this is because the $F_Array obtains the folder within the 29944M_10386 folder to complete ;the string, which is then used in the code below to rename the .zip file. $aZipList = _FileListToArray($targetDir,"*.zip",0) If IsArray($aZipList) Then ;MsgBox(0, "TEST PATH", $targetDir &$aZipList[1] & @CRLF & $targetDir &"DATA_CHILD.zip");JUST FOR TESTING PURPOSES FileMove($targetDir &$aZipList[1],$targetDir &"DATA_CHILD.zip") EndIf Next ;------------------------------------------------------------------------------------------ ; EXTRACTS CHILD ZIP .NCP & .LCN FILE ;------------------------------------------------------------------------------------------ ;THIS CODE EXTRACTS THE .NCP and .LCN FILE(S) FROM THE SPECIFIED FOLDER $szZipFile = $targetDir &"DATA_CHILD.zip";this is the zip file to extract $szDestDir = "C:\OUTPUT";this is the destination to extract the zip files $aZipList = _ZipList2Array($szZipFile) for $x =0 to UBound($aZipList)-1 $file_type = StringLower(StringRight($aZipList[$x][1],4)) If $file_type = ".ncp" Or $file_type = ".lcn" Then ConsoleWrite("Extracting:"&$aZipList[$x][1]) $vResult = _ZipUnZipItem($szZipFile,$aZipList[$x][1],$szDestDir) ConsoleWrite(" -- "&_ZipFormatMessage($ZR_RECENT)&@lf) EndIf Next ;------------------------------------------------------------------------------------------ ; MOVES FILES TO APPROPRIATE LOCATION. INCLUDES ERROR CHECKING AND NOTIFICAITON ;------------------------------------------------------------------------------------------ #include <MyExtras\NotificationBar.au3>;this is a notification bar that is compiled during into setup once built DirMove("C:\OUTPUT\MASTER\","C:\OUTPUT\29944M_10386",9);moves the .ncp file to the folder (creates folder if doesn't exist) DirRemove("C:\OUTPUT\MASTER");deletes the original folder ;------------------------------------------------------------------------------------------ ; CLEANUP ;------------------------------------------------------------------------------------------ ;Cleanup procedure DirRemove("C:\EXTRCT_TEMP", 1);Delete TEMP FileDelete("C:\INPUT\*.zip");Deletes any zip files within the input folder PluginClose($hPluginDll);closes the Au3Zip.dll plugin Edited April 20, 2008 by jben Link to comment Share on other sites More sharing options...
Valuater Posted April 20, 2008 Share Posted April 20, 2008 you can chage this... if FileExists ("C:\INPUT\*.zip")then else exit endifoÝ÷ ÚÚ4Ib殶sfbæ÷BfÆTW7G2gV÷C´3¢b3#´åUBb3#²¢ç¦gV÷C²FVâW 8) Link to comment Share on other sites More sharing options...
jben Posted April 20, 2008 Author Share Posted April 20, 2008 (edited) Thanks..Thats a couple of lines down haha.. updated the post...Took out the silly notification aswell. Is it possible to create a loop so I don't have to copy this code 4 times over... The code below is the bit I would hope I could loop so I dont have to copy it a couple of times..I will be checking a couple of different folders. I could quite easily copy the code below,pase it a 3 times and just change the folder name but thats going to make the situation worse :-( expandcollapse popup;------------------------------------------------------------------------------------------ ; RENAMES CHILD ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL SEARCH THE TEMP FOLDER FOR THE CHILD ZIP AND RENAME TO DATA_CHILD.ZIP ;THIS WILL ALSO ENSURE THAT REGARDLESS OF THE FILE (DATE) THAT THE FILE WILL STILL BE ;RECOGNIZED AND EXTRACTED. $F_Array = __FldrListToArray("C:\EXTRCT_TEMP\29944M_10386\", 0);the rest of this string is detected in the code below. For $I = 1 To Ubound($F_Array) -1 $targetDir = $F_Array[$I];this code states that the targetdir is the information provided via the $F_Array ;the purpose in this is because the $F_Array obtains the folder within the 29944M_10386 folder to complete ;the string, which is then used in the code below to rename the .zip file. $aZipList = _FileListToArray($targetDir,"*.zip",0) If IsArray($aZipList) Then ;MsgBox(0, "TEST PATH", $targetDir &$aZipList[1] & @CRLF & $targetDir &"DATA_CHILD.zip");JUST FOR TESTING PURPOSES FileMove($targetDir &$aZipList[1],$targetDir &"DATA_CHILD.zip") EndIf Next ;------------------------------------------------------------------------------------------ ; EXTRACTS CHILD ZIP .NCP & .LCN FILE ;------------------------------------------------------------------------------------------ ;THIS CODE EXTRACTS THE .NCP and .LCN FILE(S) FROM THE SPECIFIED FOLDER $szZipFile = $targetDir &"DATA_CHILD.zip";this is the zip file to extract $szDestDir = "C:\OUTPUT";this is the destination to extract the zip files $aZipList = _ZipList2Array($szZipFile) for $x =0 to UBound($aZipList)-1 $file_type = StringLower(StringRight($aZipList[$x][1],4)) If $file_type = ".ncp" Or $file_type = ".lcn" Then ConsoleWrite("Extracting:"&$aZipList[$x][1]) $vResult = _ZipUnZipItem($szZipFile,$aZipList[$x][1],$szDestDir) ConsoleWrite(" -- "&_ZipFormatMessage($ZR_RECENT)&@lf) EndIf Next Edited April 20, 2008 by jben Link to comment Share on other sites More sharing options...
jben Posted April 20, 2008 Author Share Posted April 20, 2008 What i'm trying to achieve is something like this $OUTPUT = loop a - 29944M_10386\ b - 53464M_10286\ c - 00002M_10376\ And the loop goes through and then the code below can call in the information from the loop.I just thought this might be the best way forward? ;------------------------------------------------------------------------------------------ ; RENAMES CHILD ZIP ;------------------------------------------------------------------------------------------ $F_Array = __FldrListToArray("C:\EXTRCT_TEMP\ & $OUTPUT", 0);the rest of this string is detected in the code below. For $I = 1 To Ubound($F_Array) -1 $targetDir = $F_Array[$I];this code states that the targetdir is the information provided via the $F_Array ;the purpose in this is because the $F_Array obtains the folder within the 29944M_10386 folder to complete ;the string, which is then used in the code below to rename the .zip file. $aZipList = _FileListToArray($targetDir,"*.zip",0) If IsArray($aZipList) Then ;MsgBox(0, "TEST PATH", $targetDir &$aZipList[1] & @CRLF & $targetDir &"DATA_CHILD.zip");JUST FOR TESTING PURPOSES FileMove($targetDir &$aZipList[1],$targetDir &"DATA_CHILD.zip") EndIf Next Link to comment Share on other sites More sharing options...
Zedna Posted April 20, 2008 Share Posted April 20, 2008 Always make helper Function for repetitive code like _UnzipExtFiles($szZipFile, $ext, $szDestDir) in this case: expandcollapse popup#include-once #include<MyExtras\_ZipPlugin.au3>;this is required for unzipping on dev PC ;unless the Au3Zip.dll is in the system folder.Just leaving this here for security. #include <File.au3>;this is required for checking files. #include <MyExtras\folder.au3>;this is for checking folders. $szPluginPath = @ScriptDir & "\Au3Zip.dll" $hPluginDll = PluginOpen($szPluginPath) If $hPluginDll = -1 Then MsgBox(266288, "Error:", "Plugin not initialized.") Exit EndIf ;------------------------------------------------------------------------------------------ ; INITIAL CHECKS BEFORE PROCEEDING ;------------------------------------------------------------------------------------------ If Not FileExists("C:\INPUT\*.zip") Then Exit ;------------------------------------------------------------------------------------------ ; RENAMES PARENT ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL RENAME THE ZIP FOLDER IN THE INPUT FOLDER TO A NAME THAT THE CODE WILL ;RECOGNIZE. THE PURPOSE IN THIS IS TO ENSURE THAT REGARDLESS OF THE ZIP FILE NAME, THE CODE ;WILL STILL EXTRACT THE FILES.ORIGINAL ZIP NAME IS IN THE FORMAT OF "WEEKLY UPDATE (DATE).ZIP" ;(DATE) IS UNIQUE FOR EACH UP ISSUE OF THE ZIP FILE, THE CODE BELOW RESOLVES THIS ISSUE. $targetDir = "C:\INPUT\" $aZipList = _FileListToArray($targetDir, "*.zip", 1);this returns files only as defined in the AutoIT help files. If IsArray($aZipList) Then FileMove($targetDir & $aZipList[1], $targetDir & "DATA_PARENT.zip") EndIf ;------------------------------------------------------------------------------------------ ; EXTRACTS PARENT ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL EXTRACT THE INFORMATION IN THE INPUT FOLDER, WHICH HAS BEEN RENAMED TO DATA_PARENT _UnzipExtFiles("C:\INPUT\DATA_PARENT.zip", ".zip", "C:\EXTRCT_TEMP") ;------------------------------------------------------------------------------------------ ; RENAMES CHILD ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL SEARCH THE TEMP FOLDER FOR THE CHILD ZIP AND RENAME TO DATA_CHILD.ZIP ;THIS WILL ALSO ENSURE THAT REGARDLESS OF THE FILE (DATE) THAT THE FILE WILL STILL BE ;RECOGNIZED AND EXTRACTED. $F_Array = __FldrListToArray("C:\EXTRCT_TEMP\29944M_10386\", 0);the rest of this string is detected in the code below. For $I = 1 To UBound($F_Array) - 1 $targetDir = $F_Array[$I];this code states that the targetdir is the information provided via the $F_Array ;the purpose in this is because the $F_Array obtains the folder within the 29944M_10386 folder to complete ;the string, which is then used in the code below to rename the .zip file. $aZipList = _FileListToArray($targetDir, "*.zip", 0) If IsArray($aZipList) Then ;MsgBox(0, "TEST PATH", $targetDir &$aZipList[1] & @CRLF & $targetDir &"DATA_CHILD.zip");JUST FOR TESTING PURPOSES FileMove($targetDir & $aZipList[1], $targetDir & "DATA_CHILD.zip") EndIf Next ;------------------------------------------------------------------------------------------ ; EXTRACTS CHILD ZIP .NCP & .LCN FILE ;------------------------------------------------------------------------------------------ ;THIS CODE EXTRACTS THE .NCP and .LCN FILE(S) FROM THE SPECIFIED FOLDER _UnzipExtFiles($targetDir & "DATA_CHILD.zip", ".ncp|.lcn", "C:\OUTPUT") ;------------------------------------------------------------------------------------------ ; MOVES FILES TO APPROPRIATE LOCATION. INCLUDES ERROR CHECKING AND NOTIFICAITON ;------------------------------------------------------------------------------------------ #include <MyExtras\NotificationBar.au3>;this is a notification bar that is compiled during into setup once built DirMove("C:\OUTPUT\MASTER\", "C:\OUTPUT\29944M_10386", 9);moves the .ncp file to the folder (creates folder if doesn't exist) DirRemove("C:\OUTPUT\MASTER");deletes the original folder ;------------------------------------------------------------------------------------------ ; CLEANUP ;------------------------------------------------------------------------------------------ ;Cleanup procedure DirRemove("C:\EXTRCT_TEMP", 1);Delete TEMP FileDelete("C:\INPUT\*.zip");Deletes any zip files within the input folder PluginClose($hPluginDll);closes the Au3Zip.dll plugin ; uznip all files of defined filetype from source ZIP file to dest directory Func _UnzipExtFiles($szZipFile, $ext, $szDestDir) $ext = StringSplit($ext, '|') ; allow more than one extension, | as delimiter $aZipList = _ZipList2Array($szZipFile) For $x = 0 To UBound($aZipList) - 1 $file_type = StringLower(StringRight($aZipList[$x][1],4)) ; test if filetype match $found = 0 For $y = 1 To UBound($ext) If $ext[$y] = $file_type Then $found = 1 ExitLoop EndIf Next If $found Then ;this code extracts the file with the extensions specified here ConsoleWrite("Extracting:" & $aZipList[$x][1]);just shows Extracting in the AutoIT console at bottom for debugging purposes $vResult = _ZipUnZipItem($szZipFile, $aZipList[$x][1], $szDestDir) ConsoleWrite(" -- " & _ZipFormatMessage($ZR_RECENT) & @LF) EndIf Next EndFunc Resources UDF ResourcesEx UDF AutoIt Forum Search Link to comment Share on other sites More sharing options...
jben Posted April 20, 2008 Author Share Posted April 20, 2008 I also found this: I have error checked the plugin twice, rather un-neccesary.. Thanks everyone ;------------------------------------------------------------------------------------------ ; EXTRACTS PARENT ZIP ;------------------------------------------------------------------------------------------ ;THIS CODE WILL EXTRACT THE INFORMATION IN THE INPUT FOLDER, WHICH HAS BEEN RENAMED TO DATA_PARENT $szZipFile = "C:\INPUT\DATA_PARENT.zip";this is the zip file to extract $szDestDir = "C:\EXTRCT_TEMP";this is the destination to extract the zip files If $hPluginDll = -1 Then MsgBox(266288,"Error:","Plugin not initialized.") Exit Link to comment Share on other sites More sharing options...
jben Posted April 20, 2008 Author Share Posted April 20, 2008 Anyways. Thanks everyone for your contribution to this post. Its really helped alot. Have a good evening. ;-) Link to comment Share on other sites More sharing options...
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