What you are looking for is UPX for your exe's and your dll's. JAR files are just zip files (only the extension changes). Therefore, you can use 7-Zip for that. Just un zip, and re-zip using higher compression. Once you are finished change the extension from zip (or 7z) to jar.
--------------- Marge: Homer, the plant called. They said if you don't show up tomorrow don't bother showing up on Monday. Homer: Woo-hoo. Four-day weekend.
"In three words I can sum up everything I've learned about life: it goes on." -- Robert Frost
"In three words I can sum up everything I've learned about life: baby ain't mine." -- Adam Holguin
I believe he was asking about the script to compress everything that John mentioned under the Development link. Unzipping and recompressing jar files one-by-one takes a rediculous amount of time
My apologies, I just have never bothered looking at the dev. page. But now I know what he means.
--------------- Marge: Homer, the plant called. They said if you don't show up tomorrow don't bother showing up on Monday. Homer: Woo-hoo. Four-day weekend.
"In three words I can sum up everything I've learned about life: it goes on." -- Robert Frost
"In three words I can sum up everything I've learned about life: baby ain't mine." -- Adam Holguin
On asking John about that if he ever emails me back
(I have a sneaking suspicion that he's on holidays again)
----
Ryan McCue
Person 1: Oh my god. You will never believe what just happened.
Person 2: What?
Person 1: I can't remember, I've forgotten.
"If you're not part of the solution, you're part of the precipitate."
You can use this simple batch file for the .JAR file(s):
@echo off
rem J2Z.BAT
rem Quick'n dirty solution to repack a JAR file with 7zip.
rem The one and only parameter is the JAR file name without extension.
rem The JAR file itself will be overwritten with the new ZIP file.
rem You can use with the following command line or batch:
rem for %%a in (*.jar) do call j2z %%~na
rem to compress all .JAR files in a directory.
rem 7zip executable existense check (set up with your path)
set _7zp=7z.exe
if not exist %_7zp% goto no7zp
rem JAR file existense check
set _jar=%1.jar
if not exist %_jar% goto nojar
rem temp directory existense check
set _tmp=%temp%
if not exist %_tmp% goto notmp
rem we shall need a work directory
if exist %_tmp%\%1 rd /q /s %_tmp%\%1
md %_tmp%\%1
rem extracting JAR file to work directory
%_7zp% x %_jar% -o%_tmp%\%1\
rem repacking JAR file with 7zip
%_7zp% a -mx=9 -r -tzip %_jar% %_tmp%\%1\*.*
rem purge work directory
rd /q /s %_tmp%\%1
rem finished for now
goto end
rem no 7zip executable found
:no7zp
echo 7zip executable (%_7zp%) not found.
pause
goto end
rem no JAR file found
:nojar
echo JAR file (%_jar%) not found.
pause
goto end
rem no temp directory found
:notemp
echo Temp directory (%_tmp%) not found.
pause
goto end
rem this is the end, my friend
:end
set _7zp=
set _jar=
set _tmp=
For .EXE and .DLL files, you can use the following command:
upx *.exe *.dll
Some official recursive stuff would be a lot more more fun, of course :).
Here's what I did with your script to make it recursive and not have to use a batch to call another batch.
Take it for what it's worth since it's "unofficial".
Throw Ryan's commandline for UPXing executables and you've got the start to a decent all-in-one application compressing batch file.
@echo off
:: J2Z.BAT
:: Quick'n dirty solution to repack a JAR file with 7-Zip.
:: The JAR file itself will be overwritten with the new compressed JAR file.
:: 7zip executable existence check (set your path to 7z.exe here)
set _7zp="c:\Program Files\7-Zip\7z.exe"
if not exist %_7zp% goto no7zp
:: temp directory existence check
set _tmp=%temp%
if not exist %_tmp% goto notmp
for /r %%e in (*.jar) do (if exist %_tmp%\%%~nxe (rd /q /s %_tmp%\%%~nxe) & md %_tmp%\%%~nxe) & (%_7zp% x %%e -o%_tmp%\%%~nxe\ & %_7zp% a -mx=9 -r -tzip %%e %_tmp%\%%~nxe\*.*) & (rd /q /s %_tmp%\%%~nxe)
goto end :: finished for now
:no7zp :: no 7-Zip executable found
echo 7zip executable (%_7zp%) not foun.d & pause & goto end
:notemp :: no temp directory found
echo Temp directory (%_tmp%) not found. & pause & goto end
:end :: this is the end, my friend
set _7zp=
set _tmp=
Cancer Survivors -- Remember the fight, celebrate the victory!
Help control the rugrat population -- have yourself spayed or neutered!
%_upx% needs to be defined
You can combine those two lines into one (no need to loop thru the files twice)
Those aren't the portableapps.com "recommended" switches for UPX
set _upx="c:\upx\upx.exe" :: set upx.exe location ex: c:\upx\upx.exe
for /r %%e in (*.exe,*.dll) do %_upx% "%%e" --best --compress-icons=0 --crp-ms=999999
set _upx=
You could add in the lines for "if not exists" for upx.exe like the original batch file above did for 7zip if you want it to be more fancy.
Cancer Survivors -- Remember the fight, celebrate the victory!
Help control the rugrat population -- have yourself spayed or neutered!
That's a bit messy. It would be nice to have upx process all dll/exe files in a directory, or (even better) have upx process everything in a single step. You could use for to create filenames instead of having it simply pass one file to upx at a time. Have for pass directory names as parts of arguments passed to upx. The output looks much better (and upx will calculate total savings, which is quite nice).
Sorry to dig this old thread up, but I was trying to create a little program to do this based upon the script above when I ran into a problem.
Sometimes, when I use the "for" loop, some files get inserted twice. UPX, 7-zip and optipng all try to compress the files twice when this happens. I think that this has something to do with the for loop in the batch command, because it happens with all three exe's.
Basically, the first time the file is UPX'ed and/or optipng'ed correctly as usual. A few files later, I see that the batch loop tries to recrompress one or two of the files again -- and of course it fails. This does not really bother me except that when I am re-jarring, this could take some time -- and sometimes the re-jar goes into an endless loop of re-jar's.
Has anyone else had any problems like this? I have tried and tried again and this behavior looks completely random (I am sure that it is not, but it looks random).
If this is a known problem, I would love to know how to solve it. Otherwise, Bahamut, I would love to know the batch command to do what you wrote just above.
I'm re-doing all my scripts and I found a typo in the original JAR recompression script posted to this thread and the one I did later that uses recursion.
This line:
if not exist %_tmp% goto notmp
Needs to be changed to:
if not exist %_tmp% goto notemp
Cancer Survivors -- Remember the fight, celebrate the victory!
Help control the rugrat population -- have yourself spayed or neutered!
What you are looking for is UPX for your exe's and your dll's. JAR files are just zip files (only the extension changes). Therefore, you can use 7-Zip for that. Just un zip, and re-zip using higher compression. Once you are finished change the extension from zip (or 7z) to jar.
---------------
Marge: Homer, the plant called. They said if you don't show up tomorrow don't bother showing up on Monday.
Homer: Woo-hoo. Four-day weekend.
"In three words I can sum up everything I've learned about life: it goes on." -- Robert Frost
"In three words I can sum up everything I've learned about life: baby ain't mine." -- Adam Holguin
I believe he was asking about the script to compress everything that John mentioned under the Development link. Unzipping and recompressing jar files one-by-one takes a rediculous amount of time
The developer formerly known as ZGitRDun8705
My apologies, I just have never bothered looking at the dev. page. But now I know what he means.
---------------
Marge: Homer, the plant called. They said if you don't show up tomorrow don't bother showing up on Monday.
Homer: Woo-hoo. Four-day weekend.
"In three words I can sum up everything I've learned about life: it goes on." -- Robert Frost
"In three words I can sum up everything I've learned about life: baby ain't mine." -- Adam Holguin
On asking John about that if he ever emails me back
(I have a sneaking suspicion that he's on holidays again)
----
Ryan McCue
Person 1: Oh my god. You will never believe what just happened.
Person 2: What?
Person 1: I can't remember, I've forgotten.
"If you're not part of the solution, you're part of the precipitate."
You can use this simple batch file for the .JAR file(s):
For .EXE and .DLL files, you can use the following command:
Some official recursive stuff would be a lot more more fun, of course :).
You could try using the FOR command like in Ryan's UPX example and put all the commands on one line separated with the ampersand
build work dir
(begin FOR_loop) extract & repack & flush_work_dir (end_FOR_loop)
remove work dir
No need to build/remove the work dir for every jar file, (unless it's easier to code that way of course)
I'll look into this whole thing more tonight if I get some time.
Cancer Survivors -- Remember the fight, celebrate the victory!
Help control the rugrat population -- have yourself spayed or neutered!
Here's what I did with your script to make it recursive and not have to use a batch to call another batch.
Take it for what it's worth since it's "unofficial".
Throw Ryan's commandline for UPXing executables and you've got the start to a decent all-in-one application compressing batch file.
Cancer Survivors -- Remember the fight, celebrate the victory!
Help control the rugrat population -- have yourself spayed or neutered!
Awesome, man :).
With to more lines after the core loop, you can have the universal compressor:
%_upx% needs to be defined
You can combine those two lines into one (no need to loop thru the files twice)
Those aren't the portableapps.com "recommended" switches for UPX
You could add in the lines for "if not exists" for upx.exe like the original batch file above did for 7zip if you want it to be more fancy.
Cancer Survivors -- Remember the fight, celebrate the victory!
Help control the rugrat population -- have yourself spayed or neutered!
That's a bit messy. It would be nice to have upx process all dll/exe files in a directory, or (even better) have upx process everything in a single step. You could use for to create filenames instead of having it simply pass one file to upx at a time. Have for pass directory names as parts of arguments passed to upx. The output looks much better (and upx will calculate total savings, which is quite nice).
Vintage!
Sorry to dig this old thread up, but I was trying to create a little program to do this based upon the script above when I ran into a problem.
Sometimes, when I use the "for" loop, some files get inserted twice. UPX, 7-zip and optipng all try to compress the files twice when this happens. I think that this has something to do with the for loop in the batch command, because it happens with all three exe's.
Basically, the first time the file is UPX'ed and/or optipng'ed correctly as usual. A few files later, I see that the batch loop tries to recrompress one or two of the files again -- and of course it fails. This does not really bother me except that when I am re-jarring, this could take some time -- and sometimes the re-jar goes into an endless loop of re-jar's.
Has anyone else had any problems like this? I have tried and tried again and this behavior looks completely random (I am sure that it is not, but it looks random).
If this is a known problem, I would love to know how to solve it. Otherwise, Bahamut, I would love to know the batch command to do what you wrote just above.
Thanks everyone. CD
These scripts are no longer necessary. Just use the PortableApps.com AppCompactor:
https://portableapps.com/apps/utilities/appcompactor
Sometimes, the impossible can become possible, if you're awesome!
I do use AppCompactor. I am doing this to learn more about dos batch scripts, autohotkey and programming in general. Call it personal development.
I'm re-doing all my scripts and I found a typo in the original JAR recompression script posted to this thread and the one I did later that uses recursion.
This line:
Needs to be changed to:
Cancer Survivors -- Remember the fight, celebrate the victory!
Help control the rugrat population -- have yourself spayed or neutered!