Directory to Batch Revisited

PKWare now has a new v2.5 version of PKZIP that is compatible with the old pkzip/pkunzip but supports long filenames, making my original directory-batch compressor viable as-is. Despite the "short filenames only" warning, if used with the pkzip/pkunzip from PK250DOS.EXE it works fine with long filenames.

I find that compressing pages/apps to a single self-contained batch is more convenient than using a separate batch to unzip the archive, mainly because the resulting batch can be launched from within another zip file, and in general it is easier to keep up with one file than two. The originally posted DIR2BAT required 2 different versions of pkzip to accomplish this and not mangle filenames, because the "new" pkzip25 couldn't tolerate extracting an archive appended to a batch. Thankfully the new pkzip/pkunzip-compatible version 2.5 doesn't mind, making this old batch useful again.


:: DIR2BAT1 (c)1998 Terry Newton
:: Requires PKZIP.EXE and PKUNZIP.EXE
::
:: This batch "compiles" directories with subdirectories
:: into compressed self-extracting batch files that when
:: run temporarily decompress and run the specified file
:: using the windows start command. Decompresses to current
:: drive. This version for short filenames only!
::
:: Usage: DIR2BAT1 batfile runfile filemask [filemask] ...
:: For example: DIR2BAT1 webpage.bat index.htm *.*
:: Batfile should end in .bat
::
@echo off
if .%3==. echo DIR2BAT1 batfile runfile filemask [filemask] ...
if .%3==. goto end
echo Compiling...
md \dir2bat$
:: zip up target files...
pkzip>nul \dir2bat$\tempdir.zip %3 %4 %5 %6 %7 %8 %9 -rp
pkzip>nul \dir2bat$\dir2bat.zip \dir2bat$\tempdir.zip
:: create a loader...
echo> \dir2bat$\dir2bat.t1 @echo off
echo>>\dir2bat$\dir2bat.t1 echo   Unzipping files
echo>>\dir2bat$\dir2bat.t1 md \dir2bat$
echo>>\dir2bat$\dir2bat.t1 pkunzip %%0 \dir2bat$%% "%%>nul%% "%%
echo>>\dir2bat$\dir2bat.t1 pkunzip \dir2bat$\tempdir.zip \dir2bat$ -d%% "%%>nul%% "%%
echo>>\dir2bat$\dir2bat.t1 cd \dir2bat$
echo>>\dir2bat$\dir2bat.t1 echo   Waiting for application to end
echo>>\dir2bat$\dir2bat.t1 start /w %2
echo>>\dir2bat$\dir2bat.t1 cd \
echo>>\dir2bat$\dir2bat.t1 echo   Removing files
echo>>\dir2bat$\dir2bat.t1 deltree /y \dir2bat$%% "%%>nul%% "%%
echo>>\dir2bat$\dir2bat.t1 cls
:: add an EOF char...
copy \dir2bat$\dir2bat.t1 \dir2bat$\dir2bat.t2 /a>nul
:: append loader and zip and copy to target in current...
copy/b \dir2bat$\dir2bat.t2+\dir2bat$\dir2bat.zip %1>nul
:: clean up...
deltree /y \dir2bat$>nul
:end