How do I store the last part of directory in a variable?

For example I have the following path: A\B\C\D, I want to store D in variable like file_name=D.

link|improve this question

You might have more joy with this over on SuperUser (superuser.com) – jimbo Mar 13 '11 at 14:38
feedback

2 Answers

up vote 1 down vote accepted

Because of your Windows tag, I assume your cmd.exe has extensions built-in. If that is the case, you can use two of FOR's special substitution variable references:

Given a variable %A, containing a path and file:

%~nA will output the file name, %~xA will output the file extension. The following example uses the pipe character | as a delimiter. The pipe is an invalid character for files and paths and should not appear in a path. This will allow for spaces in paths and filenames. See FOR /? for full details.

C:\>SET FSPATH=C:\WINDOWS\Temp\file.txt
C:\>echo %FSPATH%
C:\WINDOWS\Temp\file.txt
C:\>FOR /F "delims=|" %A IN ("%FSPATH%") do echo %~nxA
file.txt

Alternatively, should you not have extensions in your cmd.exe, you can use delims=\, count the directory separators and split your path/file string based on that number.

Edit: Per your comment about the error. Above is an example on the command line. If you want to perform the same within a batch script, you need to double the % on the the variables:

FOR /F "delims=|" %%A IN ("%FSPATH%") do echo %%~nxA

The %%~nxA variable would then contain the file name and extension and can be used throughout your script.

link|improve this answer
i try it but the following error appear :- SPATH~nxA was unexpected at this time. – Mohammad AL-Rawabdeh Mar 13 '11 at 15:05
feedback

Give this a try:

for %f in (A\B\C\D) do set var=%~nxf
link|improve this answer
this error appear :- ~nxf was unexpected at this time. C:\Program Files\GNU\>for ~nxf – Mohammad AL-Rawabdeh Mar 13 '11 at 15:07
@MohammadAL-Rawabdeh: You said "from a command line". If you're doing it in a batch file, you'll need to use double percent signs. – Dennis Williamson Mar 13 '11 at 15:29
sorry ... i want execute it from batch file :- it will be %~nxf% – Mohammad AL-Rawabdeh Mar 13 '11 at 15:46
@MohammadAL-Rawabdeh: No. for %%f in (A\B\C\D) do set var=%%~nxf – Dennis Williamson Mar 13 '11 at 15:48
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.