/unzip

/unzip

This is an usefull alias/identifier that allowing you to unzip/extract an ZIP file (and only .zip file) into a specific destination/folder without any extra tools by using Windows functions, it was tested under mirc 7.52 on Windows 10 and working, i am not sure if it is working on other windows v

Postat de Copyright Categorie Review user Vizualizari Data
BLKoldSUN - Math Cod testat 606 2022-11-20 12:38:14

/*

This is an usefull alias/identifier that allowing you to unzip/extract an ZIP file (and only .zip file) into a specific destination/folder without any extra tools by using Windows functions, it was tested under mirc 7.52 on Windows 10 and working, i am not sure if it is working on other windows versions.

Usage:
/unzip [-do] <"ZIP File"> <"Destination Folder">
(It will echo an successfully message if succeed otherwise an error message will occurr)
Note: You can use the /.unzip command thought to unzip/extract the ZIP File to not get any echo messages back!

-d (optional) = Will delete the ZIP File when extracting finishes successfully.
-o (optional) = Will open the Destination Folder when extracting finishes successfully.

$unzip(ZIP File,Destinaton Folder).[destroy open]
(If the unzip/extract succeed then it will return 'SUCCESS' message back, otherwise it will return zero)

.destroy (optional) = Will delete the ZIP File when extracting finishes successfully.
.open (optional) = Will open the Destination Folder when extracting finishes successfully.

Examples:
/unzip "C:\Users\westor\Downloads\test.zip" "C:\Users\westo\Downloads\test_folder\"
/.unzip "C:\Users\westor\Downloads\test.zip" "C:\Users\westo\Downloads\test_folder\"
/unzip -d "C:\Users\westor\Downloads\test.zip" "C:\Users\westo\Downloads\test_folder\"
/unzip -o "C:\Users\westor\Downloads\test.zip" "C:\Users\westo\Downloads\test_folder\"
/unzip -do "C:\Users\westor\Downloads\test.zip" "C:\Users\westo\Downloads\test_folder\"

//echo -a Unzip progress: $unzip(C:\Users\westor\Downloads\test.zip,C:\Users\westo\Downloads\test_folder)
//echo -a Unzip progress: $unzip(C:\Users\westor\Downloads\test.zip,C:\Users\westo\Downloads\test_folder).destroy
//echo -a Unzip progress: $unzip(C:\Users\westor\Downloads\test.zip,C:\Users\westo\Downloads\test_folder).open
//echo -a Unzip progress: $iif($unzip($mircdirdownloads\test.zip,$mircdirdownloads),OK,ERROR)

*/

alias unzip {
  if (!$isid) {
    if (-* iswm $1) {
      if (!$remove($1,-)) { $iif($show,echo -eac info * /unzip: Missing specified flags values parameters!) | return }
      if (*d* !iswmcs $1) && (*o* !iswmcs $1) { $iif($show,echo -eac info * /unzip: Incorrect specified flags!) | return }
    }
    if (-* iswm $1) {
      var %flags = $remove($1,-)
      var %zip = $gettok($2-,1,34)
      var %dest = $gettok($2-,3,34)
      if ($count($2-,$chr(34)) !== 4) { $iif($show,echo -eac info * /unzip: Please specify $qt() characters in every locations parameter!) | return }
    }
    elseif (-* !iswm $1) {
      var %zip = $gettok($1-,1,34)
      var %dest = $gettok($1-,3,34)
      if ($count($1-,$chr(34)) !== 4) { $iif($show,echo -eac info * /unzip: Please specify $qt() characters in every locations parameter!) | return }
    }

    if (!%zip) || (!$remove(%zip,$chr(32))) { $iif($show,echo -eac info * /unzip: Not enough parameters, Please specify the ZIP file!) | return }
    if (!%dest) || (!$remove(%dest,$chr(32))) { $iif($show,echo -eac info * /unzip: Not enough parameters, Please specify a destination folder!) | return }
    if (!$isfile(%zip)) { $iif($show,echo -eac info * /unzip: The ZIP file location does not exists!) | return }
    if (!$isdir(%dest)) { $iif($show,echo -eac info * /unzip: The unzipping/extracting destination folder does not exists!) | return }
    if ($right(%zip,4) !== .zip) { $iif($show,echo -eac info * /unzip: Please specify only $qt(.zip) files for unzipping/extracting!) | return }

  }
  elseif ($isid) {
    if (!$1) { return 0 }
    if (!$2) { return 0 }
    if (!$isfile($1)) { return 0 }
    if (!$isdir($2)) { return 0 }
    if (*.zip* !iswm $1-) { return 0 }
    if ($prop) && (!$istok(destroy open,$prop,32)) { return 0 }

    var %zip = $1
    var %dest = $2
  } 

  var %n = Unzip_ $+ $ticks $+ $ctime
  if ($com(%n)) { .comclose %n }

  var %data = $&
    ZipFile= $+ $qt(%zip) $lf $&
    ExtractTo= $+ $qt(%dest) $lf $&
    Set fso = CreateObject("Scripting.FileSystemObject") $lf $&
    sourceFile = fso.GetAbsolutePathName(ZipFile) $lf $&
    destFolder = fso.GetAbsolutePathName(ExtractTo) $lf $&
    Set objShell = CreateObject("Shell.Application") $lf $&
    Set FilesInZip=objShell.NameSpace(sourceFile).Items() $lf $&
    objShell.NameSpace(destFolder).CopyHere FilesInZip, 4 Or 16 $lf $&
    Set fso = Nothing $lf $&
    Set objShell = Nothing $lf $&
    Set FilesInZip = Nothing

  .comopen %n MSScriptControl.ScriptControl
  if ($comerr) { 
    if ($com(%n)) { .comclose $v1 }
    if ($isid) { return 0 }
    elseif (!$isid) { $iif($show,echo -eac info * /unzip: There was a connection problem while trying to creating a COM!) | return }
  }

  var %r = $calc($com(%n,language,4,bstr*,vbscript) + $com(%n,executestatement,1,bstr*,%data))
  if ($comerr) { 
    if ($com(%n)) { .comclose $v1 }
    if ($isid) { return 0 }
    elseif (!$isid) { $iif($show,echo -eac info * /unzip: There was a writing problem while trying to creating a COM!) | return }
  }

  if (%flags) && (*o* iswm %flags) && (%r == 2) { run $qt(%dest) }
  if (%flags) && (*d* iswm %flags) && (%r == 2) && ($isfile(%zip)) { .remove $qt(%zip) }
  if ($isid) && ($prop) && ($prop == open) && (%r == 2) { run $qt(%dest) }
  if ($isid) && ($prop) && ($prop == destroy) && (%r == 2) { .remove $qt(%zip) }

  if ($com(%n)) { .comclose $v1 }

  if ($isid) { return $iif(%r == 2,SUCCESS,0) }
  if (!$isid) && ($show) { echo -eac info * /unzip: The ZIP file $qt(%zip) has been extracted on $qt(%dest) destination. }

  return
  :error
  if ($com(%n)) { .comclose $v1 }
  if ($isid) && ($error) { reseterror | return 0 }
  if (!$isid) && ($error) && ($show) { echo -eac info * /unzip: Scripting Error, $error | reseterror }
}