7

I am currently looking for a way to take a variable in batch and only parse out the filename.

For example, I pass my batch file a -s parameter from another application which is subsequently set to my source variable. The source file variable typically contains something like: C:\Program Files\myapp\Instance.1\Data\filetomove.ext.

I assume to read from the end of the variable until the first "\" and set the result to a new variable filename but I have not been able to use the "for /f" commmand successfully.

Any help would be much appreciated!

Update: Only standard XP or Windows 2000/2003 available...(can't assume resource kits installed).

Michael
  • 128
  • 1
  • 1
  • 6

2 Answers2

9

If its coming in as an argument to the script, i.e. %1, %2, etc, you can extract just the filename and extension into a variable like this:

set FILENAME=%~nxN

where N is the index of the argument. For example, this script will echo just the filename of the first argument:

@echo off
set FILENAME=%~nx1
echo %FILENAME%
Dave Ray
  • 39,616
  • 7
  • 83
  • 82
  • Thank you! I was re-reading the help and was over complicating the %~nxI instructions. Thanks!!!! – Michael Jan 18 '09 at 04:59
  • Yeah. Those instructions are really pretty sucky, if you're lucky enough to even find them. – Dave Ray Jan 18 '09 at 05:01
  • +1 was about to ask this, SO has a great duplicate question detector :-) – Wim Coenen Mar 05 '09 at 00:17
  • 2
    Unfortunately, this instruction seems broken if there is an "&" character inside the name. I just had the problem with a directory called "NGC&Wii". Obviously, one can change the name, but in some situations, you may not be allowed to change it. – Cyan Oct 27 '11 at 23:13
2

Slightly improved version :

set FILENAME="%~nx1"

The extra parenthesis will ensure that special characters, such as '&', will not interfere during batch execution.

Cyan
  • 13,248
  • 8
  • 43
  • 78