Hung Posted July 20, 2017 Share Posted July 20, 2017 Hi, Can you help me,pls. i have some code : #include "zip.au3" _Zip_UnzipAll(@scripdir & "\Xin chào mọi người.zip",@scripdir&"\file") It not work. I think zip.au3 not work with link UTF - 8. Can you help me ! thks Link to comment Share on other sites More sharing options...
Developers Jos Posted July 20, 2017 Developers Share Posted July 20, 2017 Do you mean that it can't handle filenames with these special characters? The UDF itself is using the standard windows com object "Shell.Application" to unzip, so not much that can be changed there. Jos Hung 1 SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
Hung Posted July 20, 2017 Share Posted July 20, 2017 Thks Pro Link to comment Share on other sites More sharing options...
Developers Jos Posted July 20, 2017 Developers Share Posted July 20, 2017 So it is not the filename it has issues with? What exactly is your problem with it? Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
TekWeis Posted July 26, 2017 Share Posted July 26, 2017 Just wanted to say thank you for this UDF. I was able to study it and make an additional function to it based on my needs. Great UDF to use and learn from. -Chris Link to comment Share on other sites More sharing options...
gishi Posted January 8, 2018 Share Posted January 8, 2018 (edited) "c:\\Zip.au3" (456) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: $ZipFile = $ZipSplit[2] $ZipFile = ^ ERROR ->08:24:55 AutoIt3.exe ended.rc:1 +>08:24:55 AutoIt3Wrapper Finished. Process exited with code 1 Edited January 8, 2018 by gishi Link to comment Share on other sites More sharing options...
gishi Posted January 8, 2018 Share Posted January 8, 2018 (edited) well i figured it out... it was the cmd stuff at the beginning of the udf..... Edited January 8, 2018 by gishi Link to comment Share on other sites More sharing options...
Roland Posted May 16, 2018 Share Posted May 16, 2018 It seems dat zip.au3 doesn't work under de lastest version of Windows 10. Windows 10 has discontinued support for direct calls to internal zip functions embedded in Windows 10. I build a script to unzip certain files. They work fine in windows 8.1 but don't do anything in Windows 10. Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted May 16, 2018 Moderators Share Posted May 16, 2018 @Roland if you would like folks to troubleshoot, posting an example of what isn't working for you would be helpful "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
t0nZ Posted November 7, 2018 Share Posted November 7, 2018 Hi to all and HI to @wraithdu and @torels and @Jos I am pretty sure this UDF is working from win7 to win 10, I remotely manage two hundreds of win machines, and the vast majority are the various recent updates of win10 . I report this because I have read previous posts and today I have a particular problem, the UDF is still working zipping and unzipping but on some subversions of win10 I noticed this: consider the function _Zip_UnzipAll expandcollapse popup; #FUNCTION# ==================================================================================================== ; Name...........: _Zip_UnzipAll ; Description....: Extract all files contained in a ZIP archive ; Syntax.........: _Zip_UnzipAll($sZipFile, $sDestPath[, $iFlag = 20]) ; Parameters.....: $sZipFile - Full path to ZIP file ; $sDestPath - Full path to the destination ; $iFlag - [Optional] File copy flags (Default = 4+16) ; | 4 - No progress box ; | 8 - Rename the file if a file of the same name already exists ; | 16 - Respond "Yes to All" for any dialog that is displayed ; | 64 - Preserve undo information, if possible ; | 256 - Display a progress dialog box but do not show the file names ; | 512 - Do not confirm the creation of a new directory if the operation requires one to be created ; |1024 - Do not display a user interface if an error occurs ; |2048 - Version 4.71. Do not copy the security attributes of the file ; |4096 - Only operate in the local directory, don't operate recursively into subdirectories ; |8192 - Version 5.0. Do not copy connected files as a group, only copy the specified files ; ; Return values..: Success - 1 ; Failure - 0 and sets @error ; | 1 - zipfldr.dll does not exist ; | 2 - Library not installed ; | 3 - Not a full path ; | 4 - ZIP file does not exist ; | 5 - Failed to create destination (if necessary) ; | 6 - Failed to open destination ; | 7 - Failed to extract file(s) ; Author.........: wraithdu, torels ; Modified.......: ; Remarks........: Overwriting of destination files is controlled solely by the file copy flags (ie $iFlag = 1 is NOT valid). ; Related........: ; Link...........: ; Example........: ; =============================================================================================================== Func _Zip_UnzipAll($sZipFile, $sDestPath, $iFlag = 20) If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) If Not _IsFullPath($sZipFile) Or Not _IsFullPath($sDestPath) Then Return SetError(3, 0, 0) ; get temp dir created by Windows Local $sTempDir = _Zip_TempDirName($sZipFile) Local $oNS = _Zip_GetNameSpace($sZipFile) If Not IsObj($oNS) Then Return SetError(4, 0, 0) $sDestPath = _Zip_PathStripSlash($sDestPath) If Not FileExists($sDestPath) Then DirCreate($sDestPath) If @error Then Return SetError(5, 0, 0) EndIf Local $oNS2 = _Zip_GetNameSpace($sDestPath) If Not IsObj($oNS2) Then Return SetError(6, 0, 0) $oNS2.CopyHere($oNS.Items(), $iFlag) ; remove temp dir created by WIndows DirRemove($sTempDir, 1) gollog("DEBUG-> " & $sDestPath & "\" & $oNS.Items().Item($oNS.Items().Count - 1).Name) ; NSC debuG !! If FileExists($sDestPath & "\" & $oNS.Items().Item($oNS.Items().Count - 1).Name) Then ; success... most likely ; checks for existence of last item from source in destination Return 1 Else ; failure Return SetError(7, 0, 0) EndIf EndFunc ;==>_Zip_UnzipAll unzipping files.zip on some win10 machines I obtain error 7 (impossible to unzip) But it's not true, the files are correctly unzipped. The function returns error 7 because I repeat myself only on some win10 machines this : If FileExists($sDestPath & "\" & $oNS.Items().Item($oNS.Items().Count - 1).Name) Then returns the "filename" and not the "filename.jpg" It checks if exist the extracted file but it doesn't find it because it lacks the .extension. I also think the real problem is in _Zip_GetNameSpace Func, related to "Shell.application" win stuff. Any ideas ?? Regards to all Link to comment Share on other sites More sharing options...
SCodeGermany Posted March 14, 2019 Share Posted March 14, 2019 (edited) kjbuvuhv Edited March 14, 2019 by SCodeGermany Link to comment Share on other sites More sharing options...
Developers Jos Posted March 14, 2019 Developers Share Posted March 14, 2019 1 hour ago, SCodeGermany said: kjbuvuhv meaning ...what? SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past. Link to comment Share on other sites More sharing options...
TalivanIBM Posted April 29, 2019 Share Posted April 29, 2019 With Win 7 64 bits and SSD, show error adding to zip, (explorer error) the zip file doesn't exist or it's empty, but the appli continues without any error, the zip file is created fine. I've changed the function: expandcollapse popup; #FUNCTION# ==================================================================================================== ; Name...........: _Zip_AddItem ; Description....: Add a file or folder to a ZIP archive ; Syntax.........: _Zip_AddItem($sZipFile, $sFileName[, $sDestDir = ""[, $iFlag = 21]]) ; Parameters.....: $sZipFile - Full path to ZIP file ; $sFileName - Full path to item to add ; $sDestDir - [Optional] Destination subdirectory in which to place the item ; + Directory must be formatted similarly: "some\sub\dir" ; $iFlag - [Optional] File copy flags (Default = 1+4+16) ; | 1 - Overwrite destination file if it exists ; | 4 - No progress box ; | 8 - Rename the file if a file of the same name already exists ; | 16 - Respond "Yes to All" for any dialog that is displayed ; | 64 - Preserve undo information, if possible ; | 256 - Display a progress dialog box but do not show the file names ; | 512 - Do not confirm the creation of a new directory if the operation requires one to be created ; |1024 - Do not display a user interface if an error occurs ; |2048 - Version 4.71. Do not copy the security attributes of the file ; |4096 - Only operate in the local directory, don't operate recursively into subdirectories ; |8192 - Version 5.0. Do not copy connected files as a group, only copy the specified files ; ; Return values..: Success - 1 ; Failure - 0 and sets @error ; | 1 - zipfldr.dll does not exist ; | 2 - Library not installed ; | 3 - Destination ZIP file not a full path ; | 4 - Item to add not a full path ; | 5 - Item to add does not exist ; | 6 - Destination subdirectory cannot be a full path ; | 7 - Destination ZIP file does not exist ; | 8 - Destination item exists and is a folder (see Remarks) ; | 9 - Destination item exists and overwrite flag not set ; |10 - Destination item exists and failed to overwrite ; |11 - Failed to create internal directory structure ; ; Author.........: wraithdu ; Modified.......: ; Remarks........: Destination folders CANNOT be overwritten or merged. They must be manually deleted first. ; Related........: ; Link...........: ; Example........: ; =============================================================================================================== Func _Zip_AddItem($sZipFile, $sFileName, $sDestDir = "", $iFlag = 21) If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0) If Not _IsFullPath($sFileName) Then Return SetError(4, 0, 0) If Not FileExists($sFileName) Then Return SetError(5, 0, 0) If _IsFullPath($sDestDir) Then Return SetError(6, 0, 0) ; clean paths $sFileName = _Zip_PathStripSlash($sFileName) $sDestDir = _Zip_PathStripSlash($sDestDir) Local $sNameOnly = _Zip_PathNameOnly($sFileName) ; process overwrite flag Local $iOverwrite = 0 If BitAND($iFlag, 1) Then $iOverwrite = 1 $iFlag -= 1 EndIf ; check for overwrite, if target exists... Local $sTest = $sNameOnly If $sDestDir <> "" Then $sTest = $sDestDir & "\" & $sNameOnly Local $itemExists = _Zip_ItemExists($sZipFile, $sTest) If @error Then Return SetError(7, 0, 0) If $itemExists Then If @extended Then ; get out, cannot overwrite folders... AT ALL Return SetError(8, 0, 0) Else If $iOverwrite Then _Zip_InternalDelete($sZipFile, $sTest) If @error Then Return SetError(10, 0, 0) Else Return SetError(9, 0, 0) EndIf EndIf EndIf Local $sTempFile = "" If $sDestDir <> "" Then $sTempFile = _Zip_AddPath($sZipFile, $sDestDir) If @error Then Return SetError(11, 0, 0) $sZipFile &= "\" & $sDestDir EndIf Local $oApp = ObjCreate("Shell.Application") Local $oNS = $oApp.NameSpace($sZipFile) ; copy the file $oNS.CopyHere($sFileName, $iFlag) Sleep(100) <---------- added Do Sleep(250) $oItem = $oNS.ParseName($sNameOnly) Until IsObj($oItem) If $sTempFile <> "" Then _Zip_InternalDelete($sZipFile, $sTempFile) Return 1 EndFunc ;==>_Zip_AddItem the error for UnzipAll function is brought about "Hide extensions for known file types", my "fast" solution is expandcollapse popup; #FUNCTION# ==================================================================================================== ; Name...........: _Zip_UnzipAll ; Description....: Extract all files contained in a ZIP archive ; Syntax.........: _Zip_UnzipAll($sZipFile, $sDestPath[, $iFlag = 20]) ; Parameters.....: $sZipFile - Full path to ZIP file ; $sDestPath - Full path to the destination ; $iFlag - [Optional] File copy flags (Default = 4+16) ; | 4 - No progress box ; | 8 - Rename the file if a file of the same name already exists ; | 16 - Respond "Yes to All" for any dialog that is displayed ; | 64 - Preserve undo information, if possible ; | 256 - Display a progress dialog box but do not show the file names ; | 512 - Do not confirm the creation of a new directory if the operation requires one to be created ; |1024 - Do not display a user interface if an error occurs ; |2048 - Version 4.71. Do not copy the security attributes of the file ; |4096 - Only operate in the local directory, don't operate recursively into subdirectories ; |8192 - Version 5.0. Do not copy connected files as a group, only copy the specified files ; ; Return values..: Success - 1 ; Failure - 0 and sets @error ; | 1 - zipfldr.dll does not exist ; | 2 - Library not installed ; | 3 - Not a full path ; | 4 - ZIP file does not exist ; | 5 - Failed to create destination (if necessary) ; | 6 - Failed to open destination ; | 7 - Failed to extract file(s) ; Author.........: wraithdu, torels ; Modified.......: ; Remarks........: Overwriting of destination files is controlled solely by the file copy flags (ie $iFlag = 1 is NOT valid). ; Related........: ; Link...........: ; Example........: ; =============================================================================================================== Func _Zip_UnzipAll($sZipFile, $sDestPath, $iFlag = 20) If Not _Zip_DllChk() Then Return SetError(@error, 0, 0) If Not _IsFullPath($sZipFile) Or Not _IsFullPath($sDestPath) Then Return SetError(3, 0, 0) Local $sTempDir = _Zip_TempDirName($sZipFile) Local $oApp = ObjCreate("Shell.Application") Local $oNS = $oApp.NameSpace($sZipFile) If Not IsObj($oNS) Then Return SetError(4, 0, 0) $sDestPath = _Zip_PathStripSlash($sDestPath) If Not FileExists($sDestPath) Then DirCreate($sDestPath) If @error Then Return SetError(5, 0, 0) EndIf Local $oNS2 = $oApp.NameSpace($sDestPath) If Not IsObj($oNS2) Then Return SetError(6, 0, 0) $oNS2.CopyHere($oNS.Items, $iFlag) DirRemove($sTempDir, 1) If FileExists($sDestPath & "\" & $oNS.Items.Item($oNS.Items.Count - 1).Name) Then ; success... most likely ; checks for existence of last item from source in destination Return 1 Else If FileExists($sDestPath & "\" & $oNS.Items.Item($oNS.Items.Count - 1).Name & ".*") Then <---- fast Solution Return 1 Else ; failure Return SetError(7, 0, $sDestPath & "\" & $oNS.Items.Item($oNS.Items.Count - 1).Name) EndIf EndIf EndFunc ;==>_Zip_UnzipAll there is no update for this au3? Link to comment Share on other sites More sharing options...
faustf Posted July 1, 2020 Share Posted July 1, 2020 sorry a fast questions but udf _Zip_UnzipAll not have option replace existing file ? thankz Link to comment Share on other sites More sharing options...
gcue Posted August 30, 2023 Share Posted August 30, 2023 (edited) is there a way to unzip using a wildcard? in other words extract only *.xlsx files from the .zip file. doesn't seem like it supports a wildcard ; #FUNCTION# ==================================================================================================== ; Name...........: _Zip_Unzip ; Description....: Extract a single item from a ZIP archive ; Syntax.........: _Zip_Unzip($sZipFile, $sFileName, $sDestPath[, $iFlag = 21]) ; Parameters.....: $sZipFile - Full path to ZIP file ; $sFileName - Name of the item in the ZIP file ; $sDestPath - Full path to the destination i tried the following but it didnt work. would be a nice add - in my opinion $unzip = _Zip_Unzip($zip_file, "*.xlsx", @ScriptDir & "\Temp") If $unzip = 0 Then MsgBox(0, "", "Unable to unzip file:" & @CRLF & @CRLF & $zip_file) Exit EndIf thanks for the great UDF! Edited August 30, 2023 by gcue 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