Skip to main content

Get the file name without the extension in DOS batch.

:: ---------------------------------------------------------------------------
:: Filename Parsing In Batch File And More Idioms
::
:: Summary: In the following examples, we iterate a list of files and use the
:: 			idiom ~[idiom] to extract certain part of a given filename.
::
:: Source: http://www.rgagnon.com/gp/gp-0008.html
:: ---------------------------------------------------------------------------

:: Extract the filename without the extension : ~n
for %i in (*.*) do echo %~ni

:: Extract the file extension without the filename : ~x
for %i in (*.*) do echo %~xi

:: Extract the file attribute : ~a
for %i in (*.*) do echo %~ai

:: Extract the file time : ~t
for %i in (*.*) do echo %~ti

:: Extract the drive only : ~d
for %i in (*.*) do echo %~di

:: Extract the path only : ~p
for %i in (*.*) do echo %~pi

:: Extract the complete name : ~s
for %i in (*.*) do echo %~si

:: Extract the file length (in bytes) : ~z
for %i in (*.*) do echo %~zi
:: %~$PATH:i searches the directories listed in the PATH environment variable
:: and expands %I to the fully qualified name of the first one found. If the
:: environment variable name is not defined or the file is not found by the
:: search, then this modifier expands to the empty string.
for %i in (java.exe) do @echo. %~$PATH:i

:: To remove quotes:
for %i in ("real'howto") do @echo. %i
::"real'howto"
for %i in ("real'howto") do @echo. %~i
::real'howto

:: The path (with drive) where the script is : ~dp0
set BAT_HOME=%~dp0
echo %BAT_HOME%
cd %BAT_HOME%

:: The path (without drive) where the script is : ~p0
set BAT_HOME=%~p0
echo %BAT_HOME%
cd %BAT_HOME%

:: The drive where the script is : ~d0
set BAT_DRIVE=%~d0
echo %BAT_DRIVE%

:: The complete script name : ~s0
set BAT_PATH=%~s0
echo %BAT_PATH%

:: The script name only (as called with or without the extension): %0
set BAT_NAME=%0
echo %BAT_NAME%