From WikiChip
Difference between revisions of "mirc/identifiers/$zip"
< mirc‎ | identifiers

(Properties)
Line 28: Line 28:
 
== Properties ==
 
== Properties ==
 
* '''.size''' - used with '''l''' only, makes $zip returns the size of the file (or 0 for a folder) instead of the filename
 
* '''.size''' - used with '''l''' only, makes $zip returns the size of the file (or 0 for a folder) instead of the filename
 +
* '''.mtime''' - used with '''l''' only, makes $zip returns the timestamp of the file instead of the filename
  
 
If '''l''' is not used, $zip returns 1 for success and 0 for failure.
 
If '''l''' is not used, $zip returns 1 for success and 0 for failure.
Line 34: Line 35:
  
 
'''Warning''': Using the 'o' switch when extracting should NOT be used when extracting into $mircdir or any folder having important files in that folder or in any subfolders below it, especially if the zip was not created by YOU.
 
'''Warning''': Using the 'o' switch when extracting should NOT be used when extracting into $mircdir or any folder having important files in that folder or in any subfolders below it, especially if the zip was not created by YOU.
 
  
 
== Example ==
 
== Example ==

Revision as of 01:47, 15 September 2022

$zip creates/tests/extracts/lists zip using optional AES-256 encryption

Note: You cannot edit an existing zip file currently.

Synopsis

$zip(file.zip,c[po],<filename/folder>[,password])
$zip(file.zip,l,N)[.size]
$zip(file.zip,t[p,password])
$zip(file.zip,e[po],<extractdir> [,password])

Parameters

  • file.zip - the zip filename you want to create/test/list/extract from
  • p - specify that the [password] parameter has been provided and should be used for the zip file
  • o - overwrite the zip file when creating, overwrite the existing files and folder when extracting. It is also required if you extract into an empty existing folder (watch out)
  • c - create a zip file and add a file name <filename> or the folder <folder> and all its subfolders.
  • l - list the content of the zip file, returns the Nth file/folder or the total of elements in the zip
  • t - test the zip file
  • e - extract all the content of the zip to the <extractdir> folder
  • N - used with l only, lists the Nth file/folder, or the total number of items with N = 0
  • <file/folder> - used with c, the file/folder to add to the created zip file
  • <extractdir> - used with e, the folder to extract the zip's content to
  • [password] = password used to encrypt or decrypt each file added to zip. Can contain spaces. Valid only when using the 'p' switch.

Properties

  • .size - used with l only, makes $zip returns the size of the file (or 0 for a folder) instead of the filename
  • .mtime - used with l only, makes $zip returns the timestamp of the file instead of the filename

If l is not used, $zip returns 1 for success and 0 for failure.

Note: If .zip contains a potentially dangerous filename such as containing '../' then 'e' and 'l' return 0 and refuse to extract or list contents.

Warning: Using the 'o' switch when extracting should NOT be used when extracting into $mircdir or any folder having important files in that folder or in any subfolders below it, especially if the zip was not created by YOU.

Example

These examples assume TESTDIR contains filenames test1.txt and test2.txt and a subfolder named Backup beneath TESTDIR contains test3.bak

//echo -a $zip(test,cp,testdir\test1.txt,foo bar)

returns 1=success: Creates zip filename "test" without the .zip extension. If you want the filename as test.zip, you must use 'test.zip' instead of 'test'. The zip contains the filename as test1.txt without the foldername. File is encrypted using the 7-character passphrase "foo bar" including the space.

Error "* File exists: $zip" -> trying to create a .zip using a string which already exists as filename/foldername
Error "* Invalid parameters: $zip" file/folder being added does not exist.

//echo -a $zip(test,cpo,testdir\test1.txt,foo bar)

Same except creates zip named 'test' by overwriting it if it already exists.

//echo -a $zip(test.zip,tp,foo bar)

Tests contents of test.zip zipfile
Error "* Invalid parameters: $zip" if test.zip filename does not exist
Returns 1=success: contents of test.zip either use this password or are not encrypted
Returns 0=fail: At least 1 file in test.zip not able to be decrypted, or test.zip is not a valid zip file.

//echo -a $zip(test3.zip,cp,TESTDIR,foo bar)

adds to test3.zip the contents of TESTDIR and all contents of any of its subfolders. In this example, the .zip contains 5 items:

DIR entry for TESTDIR
filename TESTDIR\test1.txt
filename TESTDIR\test2.txt
DIR entry for TESTDIR\Backup
filename TESTDIR\Backup\test3.bak

Note: If TESTDIR uses a different case than the existing folder, the files are added using the spelling as used in the $zip parameter. Foldernames for any empty subfolders beneath TESTDIR are also added.

//echo -a $zip(test.zip3,ep,F:\ExtractDir,foo bar)

extract contents of test.zip to F:\ExtractDir. If no path were listed, subfolder below $mircdir.
Error "* Invalid parameters: $zip" if ExtractDir foldername already exists, even if empty
If this is the test3.zip created above, it extracts test1.txt and test2.txt into F:\ExtractDir\TESTDIR folder and extracts test3.bak into F:\ExtractDir\TESTDIR\Backup folder.

Note: After extraction, you can also use

//echo -a $findfile(F:\ExtractDir\,*,0,echo -a $1-)

to discover which files were extracted from the .zip, which does not require repeatedly using $zip() to list the contents.

Note: If the password is missing/wrong for a file inside the zip, any foldernames in the zip are created.

Create logs.zip containing contents of logs subfolder beneath $mircdir, returns 1 if successful //echo -a $zip(logs.zip,c,logs)

List contents of logs.zip:
//var %i 1 | while ($zip(logs.zip,l,%i)) { echo -a $ord(%i) item: $v1 | inc %i }
Note that the 1st item was the name of the folder, indicated by the trailing backslash

Compatibility

Added: mIRC v7.55
Added on: 08 Feb 2019
Note: Unless otherwise stated, this was the date of original functionality.
Further enhancements may have been made in later versions.


See Also