Recently, I needed to compress all contents of a folder (including subfolders) to an archive file, and copy it to a remote (network) location, all from a command line. In other words, I wanted to do this:
compressAndCopyFolder <sourceFolder> <destinationFolder> <archiveFileName>
Here’s how each parameter would work:
sourceFolder
is the folder, along with all subfolders, to be added to the archive.destinationFolder
is the folder where the archive would be created.archiveFileName
is the file name of the archive
I prefer 7zip for archiving, so I could have done this simply using one command:
7z.exe" a -r "%destinationFolder%\%archiveFileName%.7z" %sourceFolder%\*
The problem with this is that it is inefficient to work with a large archive file over the network — there’s a lot of chatter going on to add files to an archive file. Much faster to create the archive locally, then copy the final archive file to the network. So, instead of one command, we have two:
echo off if "%3"=="" ( echo usage: 7zfolder ^<sourcefolder^> ^<destinationfolder^> ^<destinationfilename^> echo Note: The suffix .7z will be added at the end of destinationFilename. goto :eof ) if not exist "%1" ( echo ERROR: Source folder does not exist: %1 goto :eof ) if not exist "%2" ( echo ERROR: Destination folder does not exist: %2 goto :eof ) if exist "%2\%3.7z" ( @echo ERROR: Destination file already exists in destination folder: %2\%3 goto :eof ) @"c:\Program Files\7-Zip\7z.exe" a -r "%temp%\%3.7z" %1\* @copy "%temp%\%3.7z" %2\%3.7z /z
Now, from a command line, I just do this…
7zfolder c:\mysource \\myserver\mydest archive
… and all files in c:\mysource
will be added to an archive \\myserver\mydest\archive.7z
.
Don’t you just love batch files?