liltitus27
liltitus27

Reputation: 1760

Add all Subfolders of a root folder and their contents to an existing Zip file

I have a directory structure similar to the following:

ROOT
  --> Site_01
    --> 2015
        --> 01
             --> more subfolders and files (thousands of log files)
  --> Site_02
    --> 2015
        --> 01
             --> more subfolders and files (thousands of log files)
  --> Site_03
    --> 2015
        --> 01
             --> more subfolders and files (thousands of log files)

And somewhere else, I have a possibly existing zip file, whose contents mirror the folder structure described above. What I'd like to do is script a batch file such that it zips up everything under ROOT into the possibly already-existing zip file.

If the zip file does not already exist, I want to create it, and if it does exist, I want to simply add the contents of ROOT to it.

What I've tried so far are variants of the following:

D:\ROOT>7z -u D:\archive\logs_app.zip *  
D:\ROOT>7z -up2q2r2x2y2z2w2 D:\archive\logs_app.zip *  

I don't care if there's a file in ROOT that already exists at the same location in the archive - the already-archived file can simply be overwritten. So, based on my perusal of 7Zip's Update Switch documentation, I left out all update options. But I get the error: Command Line Error: Too short switch:-u. And for the second, I figure that regardless of state, I want to compress the file and add it to the archive; that command gives me this output and error:

7-Zip [64] 9.38 beta  Copyright (c) 1999-2014 Igor Pavlov  2015-01-03

Command Line Error:
Unsupported command:
D:\archive\logs_app.zip

Upvotes: 0

Views: 5318

Answers (2)

liltitus27
liltitus27

Reputation: 1760

Here's the command that ended up working for me:

D:\ROOT>7z a -tzip "D:\archive\logs_app.zip" * -aoa -mmt

I found a great resource that ended up helping me figure this out here. My biggest problem was that I was not paying attention to the ordering of my command arguments and switches.

1.) 7z a tells 7Zip to add files.
2.) -tzip tells 7Zip to archive the files using the standard zip format, as opposed to a 7Zip format or an iso image.
3.) "D:\archive\logs_app.zip" tells 7Zip the path to the existing archive to which I want to add files.
4.) * tells 7Zip that I want to add any file to the existing archive from the current directory.
5.) -aoa tells 7Zip to overwrite any matching existing files in the archive with whatever is in the source directory. NOTE: in many circumstances, this can be dangerous; there is no way to recover overwritten files!
6.) -mmt tells 7Zip to use multiple threads. This will generally speed up the process, particularly when you're dealing with a large number of files.

Upvotes: 3

npocmaka
npocmaka

Reputation: 57272

Could I suggest you to take a look at my zipjs.bat It does not use any external software and is capable of processing zip files under windows.But it's too big to post it here.

Here's a script that use it (should be in the same folder) and may be will solve your problem your folder is named ROOT but if you need you can change the name.And you can change the path to the zip

@echo off

rd ./temp_root >nul 2>&1
md temp_root

call zipjs.bat list -source C:\myZip.zip -flat yes | find /i "myZip.zip\ROOT" >nul 2>&1 && (
    call zipjs.bat unZipItem -source C:\myZip.zip\ROOT -destination ./temp_root -keep no
)
rd ./temp_root >nul 2>&1


call zipjs.bat addToZip -source .\ROOT -destination  C:\myZip.zip 

Upvotes: 0

Related Questions