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:
sourceFolderis the folder, along with all subfolders, to be added to the archive.
destinationFolderis the folder where the archive would be created.
archiveFileNameis 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
Don’t you just love batch files?