elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Zippear archivos en vbs/batch/js
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Zippear archivos en vbs/batch/js  (Leído 30,303 veces)
Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Zippear archivos en vbs/batch/js
« en: 4 Agosto 2008, 03:30 am »

Buenas a todos...

A quienes les gusta el scripting en batch, seguro se han preguntado alguna vez, como zippear un archivo desde el propio lenguaje, y la solución, ha sido siempre, buscar las carpetas de winzip o winrar en el sistema, para utilizar las aplicaciones de línea de comando que estos programas incluyen, lo que permitía comprimir un archivo, pero siempre dependiendo de un programa ajeno  :-\
El caso es que Win XP trae incorporado por defecto esta posibilidad ("enviar a carpeta comprimida en zip"), pero desde scripting no parecía posible acceder a ella  :(
El caso es que... en vbscript si se puede  :D, y es casi el mismo método que se utiliza en VB, por lo que sería posible zippear un archivo, utilizando scripting, y sin depender de ningún otro soft  ;D
El método lo encontre googleando mucho, y haciendo una que otra prueba, he simplificado el código, y lo he comentado para que sea entendible ,y como verán... es realmente corto.. y he aqui... el code....  :P

Código
  1. set objfso = createobject("scripting.filesystemobject")
  2. 'creamos el objeto que se encarga de manejar archivos
  3.  
  4. set nzip = objfso.opentextfile("c:\nzip.zip",2,true)
  5. 'creamos el archivo zip, en este caso nzip.zip en el directorio C:
  6. nzip.write "PK" & chr(5) & chr(6) & string(18,chr(0))
  7. nzip.close
  8. 'escribimos el encabezado del archivo, que hace que se reconozcan como zip
  9.  
  10. set objsap = createobject("shell.application")
  11. 'creamos un nuevo objeto
  12.  
  13. objsap.namespace("c:\nzip.zip").copyhere wscript.scriptfullname
  14. 'dentro de nuestro zip, copiamos el archivo, en este caso, el propio script
  15. wscript.sleep 2000
  16. 'agregamos una pequeña espera para que de tiempo a copiarse el archivo en el zip
  17.  
Como se ve, el code es muy simple ,pero totalmente efectivo... en el caso de no poder escribir en C:, cambien c:\nzip.zip por una ruta válida para poder probarlo....

Se que aquí la mayoría opta por batch, así que sería cuestión de crear el vbs por medio de echo, y cambiando wscript.scriptfullname por %0, así se comprimiría el *.bat  ;)

Eso fue todo... espero les sirva, creo que si porque más de una vez he leído a usuarios preguntado como comprimir archivos desde un script, y la respuesta siempre ha sido la misma... "buscar el directorio de winzip/winrar......."

Saludos  ;D


« Última modificación: 12 Agosto 2008, 01:52 am por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Zippear archivo en vbs/batch
« Respuesta #1 en: 4 Agosto 2008, 03:53 am »

Claro que sirve :), gracias por el aporte.

Tal ves haya una forma de hacerlo en Batch, tal ves...

Saludos.


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Zippear archivo en vbs/batch
« Respuesta #2 en: 4 Agosto 2008, 04:07 am »

Citar
Tal ves haya una forma de hacerlo en Batch, tal ves...

Quizás si... por el momento, y como comenté antes, la opción es más o menos esta....

Código
  1. echo set ^objfso = createobject("scripting.filesystemobject") >> %temp%\zippear.vbs
  2. echo set ^nzip = objfso.opentextfile("c:\nzip.zip",2,true) >> %temp%\zippear.vbs
  3. echo nzip.write "PK" ^& chr(5) ^& chr(6) ^& string(18,chr(0)) >> %temp%\zippear.vbs
  4. echo nzip.close >> %temp%\zippear.vbs
  5. echo ^set objsap = createobject("shell.application") >> %temp%\zippear.vbs
  6. echo objsap.namespace("c:\nzip.zip").copyhere %0 >> %temp%\zippear.vbs
  7. echo wscript.sleep 2000 >> %temp%\zippear.vbs
  8. start /wait %temp%\zippear.vbs
  9. del %temp%\zippear.vbs

 ;D
Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
wizard_0

Desconectado Desconectado

Mensajes: 11


THe magic


Ver Perfil
Re: Zippear archivos en vbs/batch
« Respuesta #3 en: 4 Agosto 2008, 05:58 am »

Muy  weno  excelente!!!   
salu2-->
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Zippear archivos en vbs/batch
« Respuesta #4 en: 4 Agosto 2008, 08:32 am »

Novlucker

Si te sirve de algo, asi se puede abrir un Zip en el navegador :
Código:
Rundll32.exe zipfldr.dll, RoutheTheCall prueba.zip

Saludos.
:)
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Zippear archivos en vbs/batch
« Respuesta #5 en: 4 Agosto 2008, 14:28 pm »

Novlucker
Si te sirve de algo, asi se puede abrir un Zip en el navegador :
Código:
Rundll32.exe zipfldr.dll, RoutheTheCall prueba.zip

Si, conocía el método, también lo había encontrado desde hace algún tiempo, y en base a ese, intenté de todos los modos comprimir un archivo, pero por lo visto, solo permite descomprimir  :-\, como es posible que pueda descomprimir, pero no comprimir? en todo google no hay una manera de hacer esto con Rundll32.exe zipfldr.dll!!!  :-X

Saludos
« Última modificación: 5 Agosto 2008, 14:12 pm por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Zippear archivos en vbs/batch
« Respuesta #6 en: 4 Agosto 2008, 18:35 pm »

Exactamente, haller que pusiste el code, pense que debia de haber una forma de comprimir o descomprimir en Batch, y realmente busque durante varias horas.

Y llegue a ver codes que usaban el zipfldr.dll, dynazip.dll (Algunas mas) pero nada de nada  :-\
Solo lo usaban para abrir un .zip con el Explorer. Pero nunca para comprimir o descomprimir.


Bueno luego sigo buscando.  :xD

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
BenRu
The Prodigy


Desconectado Desconectado

Mensajes: 4.006


Ver Perfil
Re: Zippear archivos en vbs/batch
« Respuesta #7 en: 4 Agosto 2008, 18:47 pm »

En batch si no recuerdo mal, se puede.

Simplemente le pasas un comando al winrar...

Miren el readme de winrar.



Un saludo
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Zippear archivos en vbs/batch
« Respuesta #8 en: 4 Agosto 2008, 18:52 pm »

Citar
A quienes les gusta el scripting en batch, seguro se han preguntado alguna vez, como zippear un archivo desde el propio lenguaje, y la solución, ha sido siempre, buscar las carpetas de winzip o winrar en el sistema, para utilizar las aplicaciones de línea de comando que estos programas incluyen, lo que permitía comprimir un archivo, pero siempre dependiendo de un programa ajeno....

Es que la idea es justamente, no depender de otro programa
 :rolleyes:

« Última modificación: 4 Agosto 2008, 18:54 pm por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Re: Zippear archivos en vbs/batch
« Respuesta #9 en: 7 Agosto 2008, 02:43 am »

Oye Novlucker, yo siempre tuve esa duda y tambien busque info... llegue hasta unos foros chinos de scripting y esto fue lo que saque, pero no lo se manejar bien....

Código:
@if(0)==(0) ECHO On
CScript.exe //NoLogo //E:JScript "%~f0" %*
GOTO :EOF
@end
var Usage="Uso: MakeZIP.CMD ZIPfile files...";
if(WScript.Arguments.Count()<2){
  WScript.Echo(Usage);
  WScript.Quit();
}
var ZIPfile=WScript.Arguments.Item(0);
var fso=new ActiveXObject("Scripting.FileSystemObject");
if(fso.GetExtensionName(ZIPfile).toUpperCase()!="ZIP"){
  WScript.Echo("Extension de Nombre Invalido -",ZIPfile);
  WScript.Quit();
}
if(!fso.FileExists(ZIPfile)){
  var File=fso.CreateTextFile(ZIPfile,false);
  File.Write("PK" + String.fromCharCode(5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));
  File.Close();
}
var wShell=new ActiveXObject("WScript.Shell");
var vbYesNoCancel=3;
var vbQuestion=32;
var vbYes=6;
var vbNo=7;
var vbCancel=2;
var Shell=new ActiveXObject("Shell.Application");
var File=fso.GetFile(ZIPfile);
var zFolder=Shell.NameSpace(File.Path);
F1:for(var k=1;k<WScript.Arguments.Count();k++){
  var Path=WScript.Arguments.Item(k);
  var FileName=fso.GetFileName(Path);
  var sFolderItem=Shell.NameSpace(fso.GetAbsolutePathName(Path)+'\\..\\').ParseName(FileName);
  if(!sFolderItem){
    WScript.Echo(Path,"- No encontrado.");
    break;
  }
  W1:while(true){
    var zFolderItem=zFolder.ParseName(FileName);
    if(!zFolderItem){
      var ModifyDate=new Date(File.DateLastModified);
      zFolder.CopyHere(sFolderItem);
      while(ModifyDate.valueOf()==new Date(File.DateLastModified).valueOf()) WScript.Sleep(100);
      break;
    }else{
      var Ans=wShell.PopUp("aaaaaaaaaa:\n\n"+
                 '"' + FileName + '"\n\nbbbbbbbbbb?',
                 0,"cccccc",vbYesNoCancel+vbQuestion);
      switch(Ans){
      case vbYes:
        zFolderItem.InvokeVerb("delete");
        break;
      case vbNo:
        break W1;
      case vbCancel:
        break F1;
      }
    }
  }
}
WScript.Quit();

Aun no se como funciona le code, o si tiene algun problema, es que lo encontre por ahi en un foro CHINO y pues queria entender un poco la sintaxis, se que es mezcla de comando Batch o CMD y de vbs, y pues nos crea un archivo ZIP con un listado de archivos que le demos...

Tu que sabes bien de VBS puedes estudiarlo y hasta podria modificarse... ;D

Espero sirva..

Saludos.
En línea


Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Archivos batch que entren a paginas web.
Scripting
martiin29 8 6,698 Último mensaje 23 Enero 2011, 12:31 pm
por SuperDraco
Archivos Batch.
Scripting
B€T€B€ 0 2,123 Último mensaje 31 Mayo 2011, 00:41 am
por B€T€B€
[Batch] Ice Crack 1.3 (Stealer y craqueador de archivos) « 1 2 3 4 »
Scripting
Eleкtro 34 30,208 Último mensaje 19 Mayo 2013, 01:50 am
por Zebas
Archivos .bat (batch) que se remplacen mutuamente
Scripting
Caparroni 0 1,728 Último mensaje 13 Febrero 2016, 12:46 pm
por Caparroni
[Batch] Cuenta de Archivos
Scripting
osmel92 1 1,997 Último mensaje 14 Marzo 2016, 06:39 am
por osmel92
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines