Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations MikeeOK on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Use javascript to extract zip files

Status
Not open for further replies.

Gill1978

Programmer
Jun 12, 2001
277
GB
Hi,

I've got a zip file on an intranet site which i need to extract the file within it and copy it to another folder on a directory and name it as a .txt file.

I have the following script that gets files and copies them to certain directories (run via command line) and changes the extensions if need be.

I have no idea how to code the zip extraction bit into it ... can anyone help?

Code:
// set to true if filenames contain yyyy-mm-dd or something similar resulting in alphabetic order being the same as date order
var ALPHABETIC_ORDER_EQUALS_DATE_ORDER = true;
// create column headings in output file
var CREATE_HEADER_ROW = false;

var fs = new ActiveXObject("Scripting.FileSystemObject");


var args = WScript.Arguments;

if (args.length<2) {
	WScript.Echo (fs.GetFile(WScript.ScriptFullName).Name + ' sourceFile, destinationFile [, sourceColumnDivider] [, destinationColumnDivider]\n' +
				'\tSourceFile can use wildcards (* and ?)\n\tSourceColumnDivider MUST be a valid regular expression!');
	WScript.Quit(1);
}

var srcFilePattern = args(0);
var destFile = args(1);
var srcDividerPattern = (args.length>2)&&args(2);
var destDivider = (args.length>3)&&args(3);
if (!destDivider) destDivider = '\t';


var srcFolder = parentFolder(srcFilePattern);
var srcPattern = new RegExp('^'+filename(srcFilePattern).replace(/(\W)/g, '\\$1').replace(/\\\?/g, '.').replace(/\\\*/g, '.*')+'$', "i");

var newest = newestFile(srcFolder, srcPattern);
if (newest) {
	if (!srcDividerPattern) {
		newest.Copy(fs.BuildPath(srcFolder.Path,destFile));
	} else {
		var src = newest.OpenAsTextStream(1/*ForReading*/);
		var dest = fs.CreateTextFile(destFile, true);

		var srcDivider = new RegExp(srcDividerPattern, "g");

		if (CREATE_HEADER_ROW) {
			var colCount = 1;
			var headerRow = 'col1' + destDivider;
			var firstRow = src.ReadLine().replace(srcDivider, function () {headerRow += 'col' + ++colCount + destDivider; return destDivider});
			dest.WriteLine(headerRow);
			dest.WriteLine(firstRow.replace(/\,/g, '.').replace(/([\"])/g, '""'));
		}
		
		dest.Write(src.ReadAll().replace(/\,/g, '.').replace(srcDivider, destDivider).replace(/([\"])/g, '""'));
		
		dest.Close();
	}	
}



function newestFile(srcFolder, srcPattern)
{
	var newest;
	for (var files = new Enumerator(srcFolder.Files); !files.atEnd(); files.moveNext()) {
		var file = files.item();
		if (srcPattern.test(file.Name)) {
			if (ALPHABETIC_ORDER_EQUALS_DATE_ORDER) {
				if (!newest || (file.Name > newest.Name)) newest = file;
			} else {
				if (!newest || (file.DateCreated > newest.DateCreated)) newest = file;
			}
		}
	}
	
	return newest;
}


function filename(path)
{
	if (path.indexOf(':') != 1 && path.indexOf('\\') != 0) {
		return fs.GetFile(WScript.ScriptFullName).Name;
	} else {
		return fs.GetFileName(path);
	}
}

function parentFolder(path)
{
	if (path.indexOf(':') != 1 && path.indexOf('\\') != 0) {
		return fs.GetFile(WScript.ScriptFullName).ParentFolder;
	} else {
		return fs.GetFolder(path.substring(0, (path.length - fs.GetFileName(path).length) - 1));
	}
}

Thanks in advance,

Julie
 
You'd have to either execute an unzip utility (probably using the WShell ActiveX control) or write the code to do the uncompression yourself. Needless to say, the former would be far easier than the latter.

Hope this helps,
Dan


[tt]Dan's Page [blue]@[/blue] Code Couch
[/tt]
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top