views:

927

answers:

2

I'm trying to create a right-click context menu command for compressing JavaScript files with YUI compressor. My ultimate goal is to try to get this to run on a context menu:

java.exe -jar yuicompressor-2.4.2.jar -o <filename>.min.js <filename>.js

I know I can use the variable %1 to reference the file name being opened. I can't figure out how to get this command into a batch file syntax and haven't been able to find any answers online.

Update:
Jeremy's answer (+comments) worked. For anyone who stumbles upon this, here is what I had to do:

In the action I created for the JavaScript file, I used this as the command:

minify.bat "%1"

Which calls my batch script, which looks like this:

java.exe -jar yuicompressor-2.4.2.jar -o "%~dpn1.min.js" %1

For the batch script, keep in mind that the code above assumes the directories for java.exe & yuicompressor are both added to your PATH variables. If you don't add these to your path, you'll have to use the full path for the files.

The sequence %~dpn is used to get:

  1. %~d - The drive
  2. %~p - The path
  3. %~n - The file name
+2  A: 

Change the action to call a batch file:

RunCompressor.bat "%1"

Use %~n1 to get the filename without the extension in RunCompressor.bat:

java.exe -jar yuicompressor-2.4.2.jar -o "%~n1.min.js" "%1"

Helpful article

If you don't like the command window appearing when the batch file runs, use the .vbs trick.

Jeremy Stein
I tried using that, and instead of it evaluating to the name of the file, I ended up with a file with a name of "`%~n1.min.js`".
Dan Herbert
What version of Windows are you using?
Jeremy Stein
I'm using Windows XP Pro
Dan Herbert
Oh, is that command line what you're entering into the File Types dialog as a new action?
Jeremy Stein
I'm using the Folder Options settings to add the new action, like this: http://imgur.com/y5nuF
Dan Herbert
OK. Use `%1` there, but call a `.bat` or `.vbs` file. I've updated my answer.
Jeremy Stein
That worked! Thanks.
Dan Herbert
A: 

Write your own class that determines the output filename to send to YUI compressor.

java.exe -cp yuicompressor-2.4.2.jar MyClass "%1"
Jeremy Stein