views:

1441

answers:

5

YUI Compressor does not accept wildcard parameters, so I cannot run it like this:

C:>java -jar yuicompressor.jar *.js

But I have over 500 files and would rather not have to create a batch file like this:

C:>java -jar yuicompressor.jar file1.js -o deploy\file1.js
C:>java -jar yuicompressor.jar file2.js -o deploy\file2.js
...
C:>java -jar yuicompressor.jar file500.js -o deploy\file500.js

And of course my file names are not in such uniform way.

Is there way to automate this without writing any code? :)

+5  A: 

I might go for a makefile (I think it would probably be more maintainable long term), but if you want a quick-n-dirty Windows batch command something like the following should work:

for %%a in (*.js) do @java -jar yuicompressor.jar "%%a" -o "deploy\%%a"
Michael Burr
It works good if there are no spaces in the file name. Thanks!
z-boss
You should be able to throw quotes in there - I'll edit that in.
Michael Burr
Yep, that did it! The last thing I need to overcome is to be able to run this batch file from folder A, have all .js files in folder B, and put output files into folder C.
z-boss
I feared that this might wander down the "Advanced Batch Scripting Hell Hole"... You can have positional parameters to batch files using %1 %2 %3, etc. However, this is when you start running into **HUGE** problems with trying to combine and quote entities that might have spaces. Insanity follows.
Michael Burr
Thanks anyway. I can always run my batch from the folder where all the .js files are. So, it's not critical.
z-boss
A: 

You'll need to use some sort of a script to get a list of all the .js files, and then runs the YUI Compressor on all of them. On the windows command prompt, something like this should work:

FOR %f IN (*.js) DO java -jar yuicompressor.jar %f -o deploy\%f
foxxtrot
A: 

And for unix or cygwin you can use xargs or something like:

ls -1 *.js | awk '{printf("java -jar yuicompressor.jar %s -o deploy/%s",$1,$1)}'

Pipe that to /bin/sh when you're happy with the command line to execute it.

Niniki
+3  A: 

I should mention that using GNU Make, I have the following rule:

%-min.js: %.js
    ${java} -jar ${compressor} $< -o ${<:.js=-min.js}
foxxtrot
+1  A: 

If you are geared towards Java, you can also use Ant for conversion. I've found a blog entry about an Ant Taks for the YUI Compressor. Disclaimer: Never tried it - sorry

Olaf