Getting the file name without extension in a Windows Batch Script

WindowsCommand LineBatch File

Windows Problem Overview


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

Windows Solutions


Solution 1 - Windows

Change the action to call a batch file:

RunCompressor.bat "%1"

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

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

Helpful article

start javaw.exe closes the command window when running the batch file.

Solution 2 - Windows

echo path of this file name is: %~dp0
echo file name of this file without extension is:%~n0
echo file extention of this file is:%~x0
echo The file name of this file is: %~nx0

Solution 3 - Windows

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

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDan HerbertView Question on Stackoverflow
Solution 1 - WindowsJeremy SteinView Answer on Stackoverflow
Solution 2 - WindowslygstateView Answer on Stackoverflow
Solution 3 - WindowsJeremy SteinView Answer on Stackoverflow