Zippear archivos en vbs/batch/js

Iniciado por Novlucker, 4 Agosto 2008, 03:30 AM

0 Miembros y 2 Visitantes están viendo este tema.

Novlucker

#10
CitarTu que sabes bien de VBS puedes estudiarlo y hasta podria modificarse...
Espero sirva..
Saludos.

Bueno, ya lo he revisado  :P, el cmd no se utiliza practicamente para, a traves de ms-dos solamente se le pasan los parametros al script, que dicho sea de paso, se trata de javascript, y el método utilizado, es practicamente el mismo que en vbs, solamente que en javascript  :P, también he de agregar,que ese code es tan largo, porque se le han agregado determinadas rutinas de verficación y esta hecho para pasar varios archivos al zip, a diferencia del que he dejado, que no verifica absolutamente nada  :xD, pero era para que se entendiera facilmente ;)

Si quieres comento el código, pero como digo, es muy parecido al que he dejado en vbs, pero con la diferencia de que esta implementado en javascript  :D

Saludos
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

Master, me vendria al pelo que lo comentaras...estoy aprendiendo de estos lenguajes de scripting (JS,VBS,Batch) y estaria interesante saber como trabaja....

Podrias de paso combinar los dos scripts, para que se acepten varios archivos para agregar al ZIP, y tambien las funcines de comprobacion, aunque no tantas...

Saludos y Gracias.


Novlucker

CitarPodrias de paso combinar los dos scripts, para que se acepten varios archivos para agregar al ZIP, y tambien las funcines de comprobacion, aunque no tantas...

Supongo que con combinar te refieres a que el vbs al igual que el js, acepte varios archivos, y que realice algún tipo de comprobación.... y que por otro lado, el js, no sea tan extenso verdad?

Si es así, no tengo problemas en hacerlo, y en cuanto tenga oportunidad, me pongo en ello  ;D

Saludos
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

Novlucker

#13
Buenas, bueno, luego hago las modificaciones, pero por lo pronto  ... comento el code que ha dejado ::SmartGenius:: :P

Código (javascript) [Seleccionar]
@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();
/* se revisa que la cantidad de argumentos sean al menos 2, sino se termina y se informa de como funciona el script*/
}
var ZIPfile=WScript.Arguments.Item(0);
/*se guarda en una variable el valor del primer argumento*/
var fso=new ActiveXObject("Scripting.FileSystemObject");
/*se crea el objeto para manejar archivos*/
if(fso.GetExtensionName(ZIPfile).toUpperCase()!="ZIP"){
WScript.Echo("Extension de Nombre Invalido -",ZIPfile);
WScript.Quit();
/*se revisa que la extension que le hemos dado a nuestro archivo sea zip*/
}
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();
/*si no existe el zip, se crea y se le escribe la cabecera que lo identifica como tal*/
}
var wShell=new ActiveXObject("WScript.Shell");
/*se crea un nuevo objeto que se utiliza una sola vez para mostrar un mensaje*/
var vbYesNoCancel=3;
var vbQuestion=32;
var vbYes=6;
var vbNo=7;
var vbCancel=2;
/* se le dan valores a algunas variables de respuesta*/
var Shell=new ActiveXObject("Shell.Application");
/* se crea un nuevo objeto para manejar archivos y carpetas*/
var File=fso.GetFile(ZIPfile);
/*se guarda el archivo zip*/
var zFolder=Shell.NameSpace(File.Path);
/*se utiliza namespace para obtener acceso a ciertas propiedades del archivo zip, y se guarda en una variable*/
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)+String.fromCharCode(92,92,46,46,92,92)).ParseName(FileName);
/*se obtiene la ruta completa del archivo*/
if(!sFolderItem){
WScript.Echo(Path,"- No encontrado.");
break;
/*Se revisa que exista la ruta del archivo, si no existe avisa y termina*/
}
W1:while(true){
/*cuando esta ok*/
var zFolderItem=zFolder.ParseName(FileName);
if(!zFolderItem){
var ModifyDate=new Date(File.DateLastModified);
/*se guarda en una variable, la fecha de la ultima modificación del archivo*/
zFolder.CopyHere(sFolderItem);
/*se copia el archivo al zip*/
while(ModifyDate.valueOf()==new Date(File.DateLastModified).valueOf()) WScript.Sleep(100);
/*cuando la fecha del archivo continue siendo la misma, se hace una espera*/
break;
}else{
/*si no esta ok*/
var Ans=wShell.PopUp("aaaaaaaaaa:\n\n"+'"'+FileName+'"\n\nbbbbbbbbbb?',0,"cccccc",vbYesNoCancel+vbQuestion);
/*muestra un mensaje, sin sentido :p*/
switch(Ans){
case vbYes:
zFolderItem.InvokeVerb("delete");
/*si se responde si, borra el archivo*/
break;
case vbNo:
break W1;
case vbCancel:
break F1;
}
}
}
}
WScript.Quit();
/*se termina el script*/


No le pongo etiquetas geshi porque lo marca de manera extraña  :¬¬
Saludos ;)

[Modifico:] Bueno, finalmente he encontrado que era lo que hacía que las etiquetas geshi marcaran todo de manera incorrecta, y lo he sustituído por un equivalente :P ---> '\\..\\'==String.fromCharCode(92,92,46,46,92,92)
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

Novlucker

Bueno, he estado viendo lo de modificar los codes para que ambos acepten más de un archivo, pero creo que no tiene mucho sentido, salvo que se le pasen todos los archivos de una carpeta, o bien, se utilice desde línea de comandos para pasarle más de un archivo, como el caso del primer javascript, así que por el momento simplemente he traducido mi primer script vbs a js para que al menos se puedan comparar los dos lenguajes  :P

Código (javascript) [Seleccionar]
var objfso = new ActiveXObject("Scripting.FileSystemObject");
/*creamos el objeto que se encarga de manejar archivos*/

var nzip = objfso.OpenTextFile("C:\\nzip.zip",2,true);

WScript.echo(WScript.scriptfullname);
/*creamos el archivo zip, en este caso nzip.zip en el directorio C:*/
nzip.write("PK" + String.fromCharCode(5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));
nzip.close;
/*escribimos el encabezado del archivo, que hace que se reconozcan como zip*/

var objsap = new ActiveXObject("Shell.Application");
/*creamos un nuevo objecto*/

objsap.namespace("c:\\nzip.zip").copyhere(WScript.scriptfullname);
/*dentro de nuestro zip, copiamos el archivo, en este caso, el propio script*/
WScript.sleep(2000);
/*agregamos una pequeña espera para que de tiempo a copiarse el archivo en el zip*/


Saludos  ;)
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

carlitos.dll

parece que es posible comprimir en zip desde batch usando comandos de dos.

Novlucker

Si lo encuentras publicalo... así queda un método más  :P
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

carlitos.dll

Aunque no crea un zip propiamente tal, la compresión es similar:


makecab /d CompressionType=MSZIP /d FolderSizeThreshold=1 archivo.ext


Y esto no lo digo yo, lo dice: Microsoft MakeCAB User's Guide

Citar
Using MSZIP compression and FolderSizeThreshold=1 will generate a cabinet file approximately the same size as a PKZIP-compatible compression engine

aunque /d CompressionType=MSZIP está demás, porque es una de las opciones por defecto.


Novlucker

#18
Es verdad, conocía ese método... de esa misma forma vienen comprimidos los archivos en el cd de instalación de windows  :P
Pero la verdad... ni la recordaba  :xD
Utilizando ese método en el netcat por ejemplo, se comprime de 59392 bytes, a 28377 bytes  ;D, y para descomprimir el archivo...
expand origen destino

Creo que es una muy buena opción que quizás varios conocen, pero nadie recuerda

Saludos
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

Viendo los ejecutables del Windows Server 2003 Resource Kit Tools, vi uno que me llamo la atencion, compress.exe, la sintaxis es la siguiente :


Syntax:

   COMPRESS [-R] [-D] [-S] [ -Z | -ZX ] Source Destination
   COMPRESS -R [-D] [-S] [ -Z | -ZX ] Source [Destination]

Description:
   Compresses one or more files.

Parameter List:
   -R           Rename compressed files.

   -D           Update compressed files only if out of date.

   -S           Suppress copyright information.

   -ZX          LZX compression. This is default compression.

   -Z           MS-ZIP compression.

   Source       Source file specification. Wildcards may be
                used.

   Destination  Destination file | path specification.
                Destination may be a directory. If Source is
                multiple files and -r is not specified,
                Destination must be a directory.

Examples:
    COMPRESS temp.txt compressed.txt
    COMPRESS -R *.*
    COMPRESS -R *.exe *.dll compressed_dir


http://www.microsoft.com/downloads/details.aspx?FamilyID=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en#RelatedLinks


Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com